字符串
-
字符串变量和数组变量类似,它并不存放字符串,不是字符串的所有者,它是字符串的管理者。
Java的字符串还是一种特殊的“不可变”对象,所有的字符串操作都是产生一个新的字符串,而不是对原来的字符串的修改。
-
用双引号括起来的0个或多个字符就是一个字符串字面量
-
"hello"
-
"1"
-
""
字符串变量
注意:包裹类型的第一个字母也是大写的
new = 创建
String s = new String("a string"); //s去管理 a string内容的字符串
创建了一个String的对象
用”a string“初始化这个对象
创建管理这个对象的变量s
让s管理这个对象
初始化字符串变量
-
String s = "hello";
-
编译器帮你创建一个String类的对象交给s来管理
字符串连接
// 运算顺序从左到右 (都是+时)
-
"age"+1+2 //左边"age"+1是string字符串,而2为整数,结果为string,若要得到"age3"的结果,需改为"age"+(1+2)
输入字符串
-
in.next(); 读入一个单词,单词的标志是空格
-
空格包括空格、tab和换行
-
in.nextLine();读入一整行
import java.util.Scanner; public class Demo06 { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s; s = in.next(); System.out.println(s); } } // 输入This is a test. // 结果为This // 若s = in.next() 改为 s = in.nextLine() // 输入This is a test. // 结果为This is a test.
对象变量的赋值
//上面:指a和b共同管理了原来a管理的字符串
//下面:指b得到了a的值,这为两个独立变量
比较两个String
if( input == "bye"){ ... } // 比较是否同一个
if( input.equals("bye")){ ... } // 比较内容是否相同
-
Strings应该用 .equals 来比较
例:
import java.util.Scanner; public class Demo06 { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s; s = in.next(); System.out.println(s); System.out.println(s=="bye"); System.out.println(s.equals("bye")); } } // 输入bye // 输出bye false true
-
== 比较是否同一个
-
equals 比较内容是否相同
字符串操作
Strings大小的比较
import java.util.Scanner; public class Demo07 { public static void main(String[] args){ Scanner in = new Scanner(System.in); String s1 = "abc"; String s2 = "abb"; System.out.println(s1.compareTo(s2)); System.out.println("abb".compareTo(s2)); } }
获得String的长度
-
用length() 函数
访问String里的字符
import java.util.Scanner; public class Demo08 { public static void main(String[] args){ Scanner in = new Scanner(System.in); String s1 = "abc"; System.out.println(s1.charAt(3)); //运行错误 System.out.println(s1.charAt(0)); //a } }
如何将s1的每一个字符单独打出来?
import java.util.Scanner; public class Demo08 { public static void main(String[] args){ Scanner in = new Scanner(System.in); String s1 = "abc"; for( int i = 0; i < s1.length(); i++ ) { System.out.println(s1.charAt(i)); } } }
得到子串
import java.util.Scanner; public class Demo09 { public static void main(String[] args){ Scanner in = new Scanner(System.in); String s1 = "0123456789汉字"; System.out.println(s1.substring(2)); //第2个数之后的数 输出:23456789汉字 System.out.println(s1.substring(2,4)); //第2个数之后的数,第4个数之前的数 输出:23 } }
寻找字符
import java.util.Scanner; public class Demo09 { public static void main(String[] args){ Scanner in = new Scanner(System.in); String s2 = "0123A56789汉字"; System.out.println(s2.indexOf('4')); //-1 (不存在) System.out.println(s2.indexOf('A')); //4 } }
找字符所在位置
import java.util.Scanner; public class Demo10 { public static void main(String[] args){ Scanner in = new Scanner(System.in); String s1 = "0123A56739汉字"; int loc = s1.indexOf('3'); System.out.println(s1.indexOf('3',loc+1)); //找第二个3 输出结果:8 System.out.println(s1.indexOf("A56")); // 输出结果:4 } }
其他String操作
不可变的String
例:
import java.util.Scanner; public class Demo10 { public static void main(String[] args){ Scanner in = new Scanner(System.in); String s1 = "abcd"; String s2 = s2.toUpperCase(); System.out.println(s2); // ABCD } }
在switch—case中使用字符串