Java中""引起来的,都是这个类的实例,称为字符串
字符串定义后是一个常量,值不可更改。字符串实际是一个字符数组。
在比较字符串时,==比较的是地址值,equals()比较字符串是否相同
String str = "qwe";//创建一个"qwe"字符串对象,将其地址值保存在str中 str = "asd";//这里看似是修改的值,其实也是将"asd"地址值赋给str
""创建对象上面两句代码会在内存中创建两个字符串对象,str引用的是最后一个的地址值。
由此可见我们在频繁更改字符串值的时候尽量不要使用String去操作,这样会消耗内存空间
//首先会在堆空间中的字符串常量池寻找是否存在"qw"字符串对象,不存在创建"qw",然后地址值赋给str1
String str1 = "qw";
//同理,字符串常量词中去寻找,存在,直接将地址值赋给str2
String str2 = "qw";
//"q" + "w"这种形式拼接字符串,是拼接后的结果去字符串常量池中寻找,同样存在,将地址值赋给str3
String str3 = "q" + "w";
//==比较地址值
System.out.println(str1 == str2);
System.out.println(str1 == str3);
true true构造方法创建对象
常用的:
new String(“”):
//1.首先会在堆空间中的字符串常量池寻找是否存在"qw"字符串对象,不存在创建"qw"
//2.然后再堆空间中new String(),然后将"qw"保存到new String()的空间中
String str1 = new String("qw");
//1.首先会在堆空间中的字符串常量池寻找是否存在"qw"字符串对象,存在
//2.然后再堆空间中new String(),然后将"qw"保存到new String()的空间中
String str2 = new String("qw");
System.out.println(str1 == str2);//false
以上创建了3个对象
//1.首先在字符串常量池中创建"q"对象
//2.然后再堆空间new StringBuilder()对象
//3.在字符串常量池中创建"w"对象
//4.在堆空间中new String()对象
//5.将"a"和new String对象在new StringBuilder()拼接
String str1 = "q" + new String("w");//不同于上面"q" + "w"
常用方法运用以上创建4个对象
String str = " Hello World ";
//length()获取字符串长度,空格包括
System.out.println(str.length());
//trim()去除首尾空格,不影响原字符串
System.out.println(str.trim());
//toUpperCase()转大写
System.out.println(str.toUpperCase());
//toLowerCase()转小写
System.out.println(str.toLowerCase());
//isEmpty()判断字符串是否为空
System.out.println(str.isEmpty());
//toCharArray()将字符串转化为char数组
for (char c : str.toCharArray()) {
System.out.print(c+",");
}
String str1 = "qw";
String str2 = "QW";
//equalsIgnoreCase()忽略字符串大小写,比较是否相等
System.out.println(str1.equalsIgnoreCase(str2));
String str = "wqweqqq";
//indexOf()获取某个字符第一次出现的索引位置,可以用于获取子串
System.out.println(str.indexOf("q"));
//lastIndexOf()获取某个字符最后一次出现的索引位置
System.out.println(str.lastIndexOf("wq"));
String str = "qwwwert";
//contains()用于验证是否存在某个字符串
System.out.println(str.contains("qw"));
String str = "你好";
//concat()用于拼接
System.out.println(str.concat("小明"));
String str = "qwert";
//判断以什么开头
System.out.println(str.startsWith("qw"));
//判断是否以什么结尾
System.out.println(str.endsWith("at"));
String mail = "123456@qq.com";
//split()正则表达式
for (String s : mail.split("@")) {
System.out.print(s+",");
}//123456,qq.com,
String str = "how are you";
//打印索引后的字符串
System.out.println(str.substring(0));
//打印[1,3)的字符串
System.out.println(str.substring(1,3));
习题
字符串倒序输出
Scanner sc = new Scanner(System.in);
System.out.println("请输入一段字符串:");
String str = sc.nextLine();
//正则表达式不给条件,简接让字符串变为字符数组
String[] newStr = str.split("");
for (int i = newStr.length - 1; i >= 0 ; i--) {
System.out.print(newStr[i]);
}
输入域名,判断网站类型
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个网站域名:");
String str = sc.next();
int index = str.lastIndexOf(".");
String topLevelDomain = str.substring(index);
switch (topLevelDomain) {
case ".com":
System.out.println("该网站为商业类网站");
break;
case ".edu":
System.out.println("该网站为教育类网站");
break;
case ".gov":
System.out.println("该网站为政务类网站");
break;
case ".org":
System.out.println("该网站为论坛类网站");
break;
}



