【Java基础】字符与字符串

1.字符char

字符数据类型用于表示单个字符。
字符数据类型char用于表示单个字符。字符型字面值用单引号括住。

char a = 'A';
char b = '4';
char c = '\u041'; // A的Unicode

字符串字面值必须括在双引号中。而字符字面值是括在单引号中的单个字符。因此"A"是一个字符串,而’A’是一个字符。

1.1 编码

常用字符的 ASCII码

字符十进制编码值Unicode 值
‘0’~‘9’48~57u0030~\u0039
‘A’~‘Z’65 ~ 90\u0041~\u005A
‘a’~'Z‘97 ~ 122\u0061 ~\u007A

自增和自减操作符也可用在char型变量上,这会得到该字符之前或之后的Unicode 字符。

1.2 转义字符

转义序列名称
\b退格键
\tTab 键
\n换行符
\f换页符
\r回车符
\\反斜杠
\"双引号

1.3 char的类型转换

//将整数转换成char型数据时只用到该数据的低十六位,其余部分都被忽略。
char ch=(char)0XAB0041; //0041,即A

//将一个浮点值转换成char型时,首先将浮点值转换成int型,然后将这个整型值转换为 char 型。
char ch=(char)65.25; //65,即A

//char型数据转换成数值型时,这个字符的Unicode 就被转换成某个指定的数值类型。
int i=(int)'A'; //65

//如果转换结果适用于目标变量,就可以使用隐式转换方式;否则,必须使用显式转换方式。
byte b='a';
int i ='a';

//但是,因为Unicode 码 \uFFF4超过了一个字节的范围,所以下面的转换就是不正确的:
byte b='\uFFF4';
//为了强制赋值,就必须使用显式转换方式
byte b=(byte)'\uFFF4';

所有数值操作符都可以用在char型操作数上。如果另一个操作数是一个数字或字符,那么char型操作数就会被自动转换成一个数字。如果另一个操作数是一个字符串,字符就会与该字符串相连。

1.4 字符的比较

两个字符可以使用关系操作符进行比较,如同比较两个数字一样。这是通过比较两个字符的 Unicode 值实现的。

if(ch>='A&& ch <=Z')
	System.out.println(ch+"is an uppercase letter");
else if(ch>='a'&& ch <='z')
	System.out.println(ch+"is a lowercase letter");
else if(ch>='0'&& ch <='9')
	System.out.println(ch+"is a numeric character");

1.5 Character类

方法描述
isDigit(ch)如果指定的字符是一个数字,返回 true
isLetter(ch)如果指定的字符是一个字母,返回 tue
isLetterOrDigit(ch)如果指定的字符是一个字母或者数字,返回true
isLowerCase(ch)如果指定的字符是一个小写字母,返回true
isUpperCase(ch)如果指定的字符是一个大写字母,返回true
toLowerCase(ch)返回指定的字符的小写形式
toUpperCase(ch)返回指定的字符的大写形式

2.String类型

char 类型只表示一个字符。为了表示一串字符,可以使用称为String(字符串)的数据类型。

String message = "Hello World"

2.1 String对象常用的方法:

实例方法(只能从一个特定的字符串实例调用)描述
length()返回字符串中的字符数
charAt(index)返回字符串中指定位置的字符
concat(s1)将本字符串和字符串s1连接,返回一个新字符串
toUpperCase()返回一个新字符串,其中所有的字母大写
toLowerCase()返回一个新字符串,其中所有的字母小写
trim返回一个新字符串,去掉了两边的空白字符
包括’ ’ \t \f \r \n等

除了concat方法外。可以使用加号(+)连接两个或多个字符串。若要用加号实现连接功能,至少要有一个操作数必须为字符串。如果操作数之一不是字符串(比如,一个int或者char),非字符串值转换为字符串,并与另外一个字符串连接。如果操作数都不是字符串,加号(+)是一个将两个数字相加的加法操作符。
另外,增强的+=操作符也可以用于字符串连接。

2.2 从控制台读取字符串

为了从控制台读取字符串,可以调用Scanner对象上的next()方法。

Scanner input = new Scanner(System.in);
String s1 = input.next()

next()方法读取以空白字符结束的字符串(’ ‘、’\t’、‘\f’、‘\r’或’\n’)。。nextLine()方法读取以按下回车键为结束标志的字符串。

  • next()、nextByte()、nextShort()、nextInt()、nextLong()、nextF1oat()、nextDouble()的输入称为基于标记的输人,因为它们读取采用空白字符分隔的单个元素。
  • nextLine()方法称为基于行的输入,读取以按下回车键为结束标志的字符串。
  • 为了避免输入错误,程序中不要在基于标记的输入之后使用基于行的输入

2.3 从控制台读取字符

从控制台读取字符,调用nextLine()方法读取一个字符串,然后在字符串上调用charAt(0)来返回一个字符。

Scanner input = new Scanner(System.in);
String s = input.nextLine();
char ch = s.charAt(0);

2.4 字符串的比较

方法描述
equals(s1)如果该字符串等于字符串 s1,返回 true
equalsIgnoreCase(s1)如果该字符串等于字符串 s1,返回 true;不区分大小写
compareTo(s1)返回一个大于0、等于0、小于0的整数,表明该字符串是否大于等于或者小于s1
compareToIgnoreCase(s1)和compareTo 一样,除了比较是不区分大小写的外
startsWith(prefix)如果字符串以特定的前缀开始,返回 true
endsWith(suffix)如果字符串以特定的后缀结束,返回 true
contains(s1)1是该字符串的子字符串,返回true
  • 操作符==只能检测string1和string2是否指向同一个对象,但不会告诉它们的内容是否相同。
  • 方法compareTo返回的实际值是依据s1和s2从左到右第一个不同字符之间的距离得出的。假设s1为"abc",s2为"abg",那么s1.compareTo(s2)返回-4。首先比较的是s1与s2中第一个位置的两个字符(a与a)。因为它们相等,所以比较第二个位置的两个字符(b与b)。因为它们也相等,所以比较第三个位置的两个字符(c与g)。由于字符c比字符g小4,所以比较之后返回-4。
  • 如果使用像>、>=、<或<= 这样的比较操作符比较两个字符串,就会发生语法错误,

2.5 子串和字符

方法描述
substring(beginIndex)返回该字符串的子串,从指定位置beginIndex的字符开始到字符串的结尾
substring(beginIndexendIndex)返回该字符串的子串,从指定位置beginIndex的字符开始到下标为endIndex-1的字符
(如果 beginIndex==endIndex,返回一个长度为0的空字符串。如果beginIndex>endIndex,将发生运行时错误。)
indexOf(ch)返回字符串中出现的第一个ch的下标。如果没有匹配的,返回-1
index0f(ch,fromIndex)返回字符串中fromIndex之后出现的第一个ch的下标。如果没有匹配的,返回-1
indexOf(s)返回字符串中出现的第一个字符串s的下标。如果没有匹配的,返回-1
indexOf(s,fromIndex)返回字符串中fromIndex之后出现的第一个字符串s的下标。如果没有匹配的,返回-1
lastIndexOf(ch)返回字符串中出现的最后一个ch的下标。如果没有匹配的,返回-1
lastIndex0f(ch,fromIndex)返回字符串中 fromIndex之前出现的最后一个ch的下标。如果没有匹配的,返回 -1
lastIndexOf(s)返回字符串中出现的最后一个字符串s的下标。如果没有匹配的,返回-1
lastIndexOf(s,fromIndex)返回字符串中fromIndex之前出现的最后一个字符串s的下标。如果没有匹配的,返回-1

2.6 字符串的转化

  • 可以将数值型字符串转换为数值。(如果字符串不是数值型字符串,转换将导致一个运行时错误)
  • 要将字符串转换为int值,使用Integer.parseInt.要将字符串转换为 double值,使用 Double.parseDouble.
int intValue = Integer.parseInt(intString);
double doubeValue = Double.parseDouble(doubleString);
  • 如果字符串不是数值型字符串,转换将导致一个运行时错误。Integer 和Doub1e 类都包含在 java.1ang包中,因此它们是自动导人的。
  • 将数值转换为字符串,只需要简单使用字符串的连接操作符连接一个空字符串即可
String s=number +"";

2.7 格式化控制台输出

可以使用 System.out.printf方法在控制台上显示格式化输出。

double amount=12618.98;
double interestRate=0.0013;
double interest =amount*interestRate;
System.out.printf("Interest is $ %4.2f",interest);

printf中的f代表格式(format),暗示着方法将以某种格式来打印。调用这个方法的语法是:

System.out.printf(format,item1,item2...itemk);

在这里插入图片描述
在这里插入图片描述
格式限定符指定每项应该如何显示。这里的项可以是数值、字符、布尔值或字符串。简单的格式标识符是以百分号(%)开头的转换码。

限定符输出
%b布尔值
%c字符
%d十进制整数
%f浮点数
%e标准科学记数法形式的数
%s字符串

举例:

示例输出
%5c输出字符并在这个字符条目前面加4个空格
%6b输出布尔值,在false值前加一个空格,在true值前加两个空格
%5d输出整数项,宽度至少为5。如果该条目的数字位数小于5,就在数字前面加空格。如果该条目的位数大于5,则自动增加宽度
%10.2f输出的浮点数项的宽度至少为10,包括小数点和小数点后两位数字。这样,给小数点前分配了7位数字。如果该条目小数点前的位数小于7,就在数字前面加空格。如果该条目小数点前的位数大于7,则自动增加宽度
%10.2e输出的浮点数项的宽度至少为10,包括小数点、小数点后两位数字和指数部分。如果按科学记数法显示的数字位数小于10,就在数前加空格
%12s输出的字符串宽度至少为12个字符。如果该字符串条目小于12个字符,就在该字符串前加空格。如果该字符串条目多于12个字符,则自动增加宽度
// 如果要显示一个带有逗号的数字,可以在数字限定符前面添加一个逗号。
System.out.printf("%,8d%,10.1f\n",12345678,12345678.263); 
// 12,345,678 12,345.678.3

// 如果要在数字前面添加0而不是空格来凑齐位数,可以在一个数字限定符前面添加0
System.out.printf("%08d %08.1f\n"12345.63);
// 00001234 000005.6

// 默认情况下,输出是右对齐的。可以在格式限定符中放一个减号(-),指定该项在指定域中的输出是左对齐的。
System.out.printf("%-8d%-8s%-8.1fn",1234,"Java",5.63));
System.out.printf("%8d%8s%8.1f\n"1234,"Java”,5.63);
//1234    Java    5.6    
//    1234    Java    5.6
  • 条目与格式标识符必须在类型上严格匹配。对应于格式标识符%f或%e的条目必须是浮点型值,例如:是40.0而不能是40。因此,int型变量不能匹配%f或%e。可以使用%.2f 来指定一个小数点后两位的浮点数值,而使用%0.2f是不正确的。
  • 使用符号%来标记格式限定符,要在格式字符串里输出字面值%,需要使用 %%。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值