原文链接:http://happyshome.cn/blog/java/basics/string.html
本文主要介绍了字符串的基本操作,以及字符串与基本类型的相互转换。
1. 前言
String是嵌入在双引号里的字符序列,例如:
String s1 = "Hi, This is a string!";
String s2 = "" // 空串
如果想输出特殊的控制字符,你需要使用反斜线\来进行转义,单引号不需要转义,例如:
String s3 = "A \"string\" nested \\inside\\ a string";
String s4 = "Hello, \u60a8\u597d!"; // "Hello, 您好!"
String s5 = "Hi, I'm a string!"; // 单引号
2. String和'+'运算符
在Java中,'+'是被重载的运算符,重载意味着对于不同类型有着不同的操作。
如果两个操作数都是数字(byte, short, int, long, float, double, char),'+'会执行加法运算,例如:
1 + 2 → 3
1.2 + 2.2 → 3.4
1 + 2.2 → 1.0 + 2.2 → 3.2
如果两个操作数是字符串,'+'会将两个字符串拼接在一起返回,例如:
"Hello" + "world" → "Helloworld"
"Hi" + ", " + "world" + "!" → "Hi, world!"
如果其中一个操作数是字符串,另外一个操作数是数字,'+'会首先将数字转化为字符串,之后进行字符串的拼接操作,例如:
"The number is " + 5 → "The number is " + "5" → "The number is 5"
"The average is " + average + "!" (suppose average=5.5) → "The average is " + "5.5" + "!" → "The average is 5.5!"
"How about " + a + b (suppose a=1, b=1) → "How about 11"
3. String操作
最常用的String操作:
- length(): 返回字符串的长度。
- charAt(int index): 返回某个字符的索引位置(索引位置是从0开始到length()-1结束)。
- equals(): 常用来比较两个字符串文本内容是否相等,切忌请不要使用"==","=="比较的是引用。
举例说明:
String str = "Java is cool!";
System.out.println(str.length()); // 返回int 13
System.out.println(str.charAt(2)); // 返回char 'v'
System.out.println(str.charAt(5)); // 返回char 'i'
// 比较两个字符串
String anotherStr = "Java is COOL!";
System.out.println(str.equals(anotherStr)); // 返回 boolean false
System.out.println(str.equalsIgnoreCase(anotherStr)); // 返回 boolean true
System.out.println(anotherStr.equals(str)); // 返回 boolean false
System.out.println(anotherStr.equalsIgnoreCase(str)); // 返回 boolean true
// 其它常用的方法
System.out.println(str.substring(0, 3)); // 返回String "Jav"
System.out.println(str.indexOf('a')); // 返回int 1
System.out.println(str.lastIndexOf('a')); // 返回int 3
System.out.println(str.endsWith("cool!")); // 返回boolean true
System.out.println(str.toUpperCase()); // 返回新的String "JAVA IS COOL!"
System.out.println(str.toLowerCase()); // 返回新的String "java is cool!"
4. Stirng和基本类型的转换
String转换为int/byte/short/long
可以使用Integer.parseInt(anIntStr),Byte.parseByte(aByteStr), Short.parseShort(aShortStr), Long.parseLong(aLongStr)进行相应的转换,需要注意的是字符串中包含非数字,运行时会抛出NumberFormatException异常,例如:
String inStr = "5566";
int number = Integer.parseInt(inStr); // 返回int类型
String转换为double/float
可以使用Double.parseDouble(aDoubleStr)或Float.parseFloat(aFloatStr)进行转换,例如:
String inStr = "55.66";
float aFloat = Float.parseFloat(inStr); // 返回float类型
String转换为char
可以使用aStr.charAt(index)从字符串中提取单个字符,例如:
String msg = "101100111001!";
int pos = 0;
while (pos < msg.length()) {
char binChar = msg.charAt(pos);
.......
++pos;
}
String转换为boolean
可以使用Boolean.parseBoolean(aBooleanStr)将文本"true"或"false"转换为boolean类型的true或false,例如:
String boolStr = "true";
boolean done = Boolean.parseBoolean(boolStr); // 返回boolean类型
基本类型(int/double/float/byte/short/long/char/boolean)转换为String
可以使用'+'操作符: 基本类型变量+ 空串(""), 或者使用String.valueOf(aPrimitve), 或者根据类型调用相应的方法进行转换: String.valueOf(aPrimitve),Integer.toString(anInt), Double.toString(aDouble),Character.toString(aChar),Boolean.toString(aBoolean)。
// 使用连接符'+',a适用于所有的基本类型
String s1 = 123 + ""; // int 123 -> "123"
String s2 = 12.34 + ""; // double 12.34 -> "12.34"
String s3 = 'c' + ""; // char 'c' -> "c"
String s4 = true + ""; // boolean true -> "true"
// String.valueOf(aPrimitive)同样适用于所有的基本类型
String s1 = String.valueOf(12345); // int 12345 -> "12345"
String s2 = String.valueof(true); // boolean true -> "true"
double d = 55.66;
String s3 = String.valueOf(d); // double 55.66 -> "55.66"
// toString()适用于每个基本类型,但是要防止空指针的异常
String s4 = Integer.toString(1234); // int 1234 -> "1234"
String s5 = Double.toString(1.23); // double 1.23 -> "1.23"
char c1 = Character.toString('z'); // char 'z' -> "z"
// char转换为String
char c = 'a';
String s5 = c; // 编译错误
String s6 = c + ""; // 将char转换为String
// boolean转换为String
boolean done = false;
String s7 = done + ""; // boolean false -> "false"
String s8 = Boolean.toString(done);
String s9 = String.valueOf(done);
char转换为int
如果想将char'0'到'9'转换为int0到9,可以用该字符减去'0'即可,例如'8' - '0' → 8。