Java字符串String
从表面上看,字符串就是双引号之间的数据,例如"Hello World",在Java中,字符串其实就是一个String类的对象,可以这样来定义一个字符串:
String str1=“Hello World”;//第一种方法
String str2=new String(“Hello World”);//第二种方法
这两种都可以创建字符串。
字符串可以通过“+”来连接,基本数据类型与字符串进行“+”操作一般也会自动转换为字符串,比如:
int a=10;
String str1="Hello"+a;//此时str就变成了Hello10
String str2="Hello"+"World";//此时str2就编程了HelloWorld
String字符串与数组有一个相同点,就是它们被初始化之后,长度是不变的,并且字符串内容也不变。如果要改变它的长度或者值,就会产生一个新的字符串,如下所示:
String str = "Hello ";//此时str被初始化为“Hello”
str += "World!";//此时str已经变成了“HelloWorld”
这个赋值有点像简单的接龙,在str后直接加了个“World”字符串,形成新的字符串“HelloWorld”。其运行原理是这样的:JVM首先在内存中存放了“Hello”字符串,并把str引用指向了“Hello”字符串的内存存放地址。此时要追加新的字符串是不可能的,因为字符串被初始化后,长度是固定的,无法改变,只有放弃原来的空间,然后JVM在内存中存放了“HelloWorld”字符串,并把str引用指向到"HelloWorld"字符串的内存存放地址,但其实在内存空间中,"Hello"这个字符串还存在,只是str不指向它了,而指向了"HelloWorld"这个新的字符串。
实际上,String类是java.lang包下的一个类,因为String特别常用,所以Java提供了一个简化的语法:
String str1="Hello";//简化语法
String str2=new String("Hello");标准语法
使用简化语法的另一个原因是,按照标准的面向对象语法,在内存使用上存在比较大的浪费,例如String str=new String(“Hello”);实际上创建了两个String对象,一个是str引用,一个是“Hello”对象。String类在内存中的存放地址
String类常用方法
- 用字符数组value创建一个String对象
public String(char[] value)
char[] value ={"a","b","c","d"};
String str = new String(value);
//相当于String str = newString("abcd")
- 用字符数组以x开始的n个字符创建一个String对象
public String(char chars[], int x, int n)
char[] value ={"a","b","c","d"};
String str = new String(value, 1, 2);
//相当于String str = newString("bc");
- 获取字符串长度
public int length()
String str = new String("478bhjd56");
int strlength = str.length();
- 获取字符串某一位置的字符
public char charAt(int index)
String str = new String("43dfzyd");
char ch = str.charAt(4);//ch = z
注意:字符串中第一个字符索引是0,最后一个是length()-1。
5.获取字符串的子串
public String substring(int beginIndex)
//该方法从beginIndex位置起,
//从当前字符串中取出剩余的字符作为一个新的字符串返回。
public String substring(int beginIndex, intendIndex)
//该方法从beginIndex位置起,从当前字符串中
//取出到endIndex-1位置的字符作为一个新的字符串返回。
String str1 = newString("asdfzxc");
String str2 = str1.substring(2);//str2 ="dfzxc"
String str3 = str1.substring(2,5);//str3 ="dfz"
6.字符串的比较
public int compareTo(String str)
//该方法是对字符串内容按字典顺序进行大小比较,
//通过返回的整数值指明当前字符串与参数字符串的大小关系。
//若当前对象比参数大则返回正整数,反之返回负整数,相等返回0。
public int compareToIgnoreCase (String str)
//与compareTo方法相似,但忽略大小写。
public boolean equals(Object obj)
//比较当前字符串和参数字符串,在两个字符串相等的时候返回true,否则返回false。
public boolean equalsIgnoreCase(String str)
//与equals方法相似,但忽略大小写。
String str1 = new String("abc");
String str2 = new String("ABC");
int a = str1.compareTo(str2);//a=32
int b = str1.compareToIgnoreCase(str2);//b=0
boolean c = str1.equals(str2);//c=false
boolean d =str1.equalsIgnoreCase(str2);//d=true
7.查找子串在字符串中的位置
public int indexOf(String str)
//用于查找当前字符串中字符或子串,返回字符或
//子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1。
public int indexOf(String str, intfromIndex)
//改方法与第一种类似,区别在于该方法从fromIndex位置向后查找。
public int lastIndexOf(String str)
//该方法与第一种类似,区别在于该方法从字符串的末尾位置向前查找。
public int lastIndexOf(String str, intfromIndex)
//该方法与第二种方法类似,区别于该方法从fromIndex位置向前查找。
8.字符串中字符的大小写转换
public String toLowerCase()
//返回将当前字符串中所有字符转换成小写后的新串
public String toUpperCase()
//返回将当前字符串中所有字符转换成大写后的新串
String str = new String("JavaStudy");
String str1 = str.toLowerCase();
//str1 = "javastudy"
String str2 = str.toUpperCase();
//str2 = "JAVASTUDY"
9.字符串两端去空格
String trim()
//去除字符串两端的空格,中间的空格不变,一般用于登陆注册时
String str = " z dali ";
String str1 = str.trim();
int a = str.length();//a = 8
int b = str1.length();//b = 6
System.out.println(a+"\n"+b);
10.将字符串分割成字符串数组
String[] split(String str)
String str = "sgs#jkc#eer";
String[] str1 = str.split("#");
for (int i = 0; i < str1.length; i++) {
System.out.println(str1[i]);
//输出结果是sgs jkc eer
11.基本类型转换为字符串
static String valueOf(xxx xx)
String s1 = String.valueOf(12.99);
System.out.println(s1);
//double类型转string类型
12.替换字符串
public String replace(char oldChar, charnewChar)
//用字符newChar替换当前字符串中所有的oldChar字符,
//并返回一个新的字符串。
public String replaceFirst(String regex,String replacement)
//该方法用字符replacement的内容替换当前字符串中遇到的
//第一个和字符串regex相匹配的子串,应将新的字符串返回。
public String replaceAll(String regex,String replacement)
//该方法用字符replacement的内容替换当前字符串中遇到的所有
//和字符串regex相匹配的子串,应将新的字符串返回。
String str = "hjdfjdskdd";
String str1 = str.replace('h','g');
//str1 ="gjdfjdskdd"
String str2 =str.replace("hj","xxx");
//str2 = "xxxdfjdskdd"
String str3 =str.replaceFirst("d","c");
//str3 = "hjcfjdskdd"
String str4 =str.replaceAll("hj","xxx");
//str4 = "xxxdfjdskdd"
System.out.println(str1+"\n"+str2+"\n"+str3+"\n"+str4);