五、字符串
1、子串
public class Qaz
{
public static void main(String[] args)
{
String greeting="Hello";
String s=greeting.substring(0,3);
System.out.print.ln(s);
}
}
输出结果为:
Hel
(0,3)中的0,代表从第一个开始。3-0=3,代表长度为3。
2、拼接
Java语言允许使用+号连接两个字符串。
public class Qaz
{
public static void main(String[] args)
{
String a="asdf";
String b="ghjkl";
String c=a+b;
System.out.println(c);
}
}
public class Qaz
{
public static void main(String[] args)
{
String a="asdf";
String b="ghjkl";
String c=a+b;
String d=c+"123";
System.out.println(c);
System.out.println(d);
}
}
输出结果为:
asdfghjkl
asdfghjkl123
3、 不可变字符串
public class Qaz
{
public static void main(String[] args)
{
String greeting="Hello";
greeting=greeting.substring(0,3)+"p!";
System.out.println(greeting);
}
}
输出结果为:
Help!
String类没有提供用于修改字符串的方法。例如将greeting的内容由“Hello”修改为“Help!”
不能直接将“lo”修改为“p“和”!“。
不可变字符的一个优点:编译器可以让字符串共享。
public class Qaz
{
public static void main(String[] args)
{
String a="abc";
String b="ABC";
String c=a+b;
String d=a;
String a=a+123;
System.out.println(a);
System.out.println(c);
System.out.println(d);
}
}
输出结果为:
abc123
abcABC
abc
String类的a,b只存放地址存放在栈中,各自内容存放在常量池中。把a,b拼接为c,c再存放在另一个位置,d=a后,d共享a的存放地址,修改a后,a重新调用一个存储地址,但不影响d。
4、 检测字符串是否相等
equals:在字符串中时比较值是否相等(其他类型比较的时地址)
public class Qaz
{
public static void main(String[] args)
{
String s1="qwe";
String s2="qwe";
String s3=new String("qwe");
String s4="qwertyui".substring(0,3);
String s5=new String("qwe");
String s6=s3;
String s7=s6;
s6=new String();
System.out.println(s1==s2);
System.out.println(s1==s3);
System.out.println(s1==s4);
System.out.println(s3==s5);
System.out.println(s3==s6);
System.out.println(s3==s7);
}
}
输出结果为:
true
false
false
false
false
true
- s2和s1值相同,所以共享一个地址。
- s3使用new String(“qwe”),值和s1相同,地址不同。
- s4是对s1的修改另外存放,地址不同。
- s5同样使用new String(“qwe”),和s3分别存放不同的地址。
- s6=s3;s7=s6;s3,s6,s7共享一个地址,使用s6=new String()后,s6和s3地址不同,但不影响s7.
public class Qaz
{
public static void main(String[] args)
{
String s1="qwe";
String s2="qwe";
String s3=new String("qwe");
String s4="qwertyui".substring(0,3);
String s5=new String("qwe");
String s6=s3;
String s7=s6;
s6=new String();
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s1.equals(s4));
System.out.println(s3.equals(s5));
System.out.println(s3.equals(s6));
System.out.println(s3.equals(s7));
}
}
输出结果为:
true
true
true
true
false
true
s6=new String();s6的值发生变化,所以输出结果为false。
下面链接是Java中的引用类型概念
5、空串和Null串
- 空串为空,但是有地址;
- null无地址
6、String API
常用的有以下几个:
- int compareTo(String other)
按照字典顺序,如果字符串位于other之前,返回一个负数;如果字符串位于other之后,返回一个整数;如果两个字符串相等,返回0。 - boolean equals(Object other)
如果字符串与other相等,返回true; - boolean starsWith(String prefix)
- boolean endsWith(String suffix)
如果字符串以suffix开头或结尾,则返回true。 - int length()
返回字符串的长度。 - String replace(CharSequence oldString,CharSquence newString)
返回一个新字符串。这个字符串用newString代替原始字符串中所有的oldString。可以用- String或StringBuilder对象作为CharSequence参数。 - String toLowerCase( )
- String toUpperCase( )
返回一个新的字符串。这个字符串将原始字符串中的大写字母改为小写,或者将原始字符串的所有小写字母改成了大写字母。 - String trim( )
返回一个新字符串。这个字符串将删除了原始字符串头部和尾部的空格。