目录
4.4.setCharAt(int index, char ch)
4.5.insert(int offset, String str):
4.6. delete(int start, int end)方法
4.7.除了上述几个常用的方法以外,StringBuffer类中还有类似String类的方法
一:String类
1.String类介绍
2.创建字符串
3 与其他类型数据进行转换
1.1.string类介绍
在不给字符串变量赋值的情况下,其默认值为空,如果此时调用String的方法,则 会发生空指针异常
1.2.创建字符串
//2.创建字符串
//直接引用字符串常量
String a1 = "time"; //
//利用构造方法实例化
String a2 = new String("yew");
//利用字符数组实例化
char[] charArray = {'q','w','e','r'};
String a3 = new String(charArray);
String a4 = new String(charArray,3,2);
1.3.String与其它类型进行转换
// 把字符串类型转换为有符号的Int类型
// 方法一:
String b1 = new String("1234");
System.out.println("int类型: "+ Integer.parseInt(b1));
// 方法二:
int c1 = Integer.valueOf(b1);
System.out.println("int类型: "+ Integer.parseInt(b1));
比较上述两种方法的区别:
Integer.parseInt(s)的作用就是把字符串s解析成有符号的int基本类型
Integer.valueOf(s)把字符串s解析成Integer对象类型,返回的integer 可以调用对象中的方法
String b1 = new String("1234");
//把字符串类型转换为double类型
System.out.println("double类型"+ Double.parseDouble(b1));
//把字符串类型转换为float类型
System.out.println("float类型:"+ Float.parseFloat(b1));
把string类型转换为其它类型
//int类型转换为String类型
int i1 = 12345;
String s1 = "";
//方法一:
s1 = i1 + "";
System.out.println("int变成了string类型" + s1);
// 方法二:
s1 = String.valueOf(i1);
System.out.println("int变成了string类型" + s1);
double d3 = 0.2;
float d9 = 0.1f;
String c3 = Float.toString(d9);
System.out.println("float变成了string类型" + c3);
String c4 = Double.toString(d3);
System.out.println("double变成了string类型" + c4);
Java中浮点类型分为单精度浮点类型(float)和双精度浮点类型double.
[注意]:在默认情况下,小数都被看作double类型,若想使用float类型,则需要在小数后面加F或者f.另外可以使用2后缀来表明一个小数是double类型数据,但没有硬性规定。
[2]声明float类型变量时如果不加F或者f,系统会认为这是一个double类型而报错
[3]浮点值属于近似值,在系统中运算的结果可能与实际有偏差
二:字符串连接,信息提取
1.length()方法会返回字符数量,获取字符串长度,也就是char的数量
2.charAt(int index)方法用来获取指定索引的字符 3.indexOf() 方法返回的是搜索的字符或者字符串首次出现的索引位置
4.starsWith()方法和endsWith()方法分别用于判断字符串是否以指定的内容开始或者结束。
5.toCharArray()方法可以将字符串转换为一个字符数组
6.contains(): 该方法可以判断字符串中是否包含指定的内容
2.1.length()
方法会返回字符数量,获取字符串长度,也就是char的数量
String a = new String("我爱清汤小肥羊");
String b = new String("我也爱火锅");
a += b;
System.out.println("a :"+a);
// length()方法会返回字符数量,获取字符串长度,也就是char的数量
int size = a.length();
System.out.println("size :"+size);
2. 2.charAt(int index)
方法用来获取指定索引的字符
//charAt(int index)方法用来获取指定索引的字符
// eg: str.charAt(index);
char chr = a.charAt(2);
System.out.println("chr:"+ chr);
2.3.indexOf()
方法返回的是搜索的字符或者字符串首次出现的索引位置,如果没有检索到要查找的字符或者字符串,则返回-1
// indexOf() 方法返回的是搜索的字符或者字符串首次出现的索引位置,
// 如果没有检索到要查找的字符或者字符串,则返回-1
// eg: a.indexOf(substr);
int index = a.indexOf("爱清");
System.out.println("index: "+index);
2.4.starsWith()方法和endsWith()
方法分别用于判断字符串是否以指定的内容开始或者结束。 这两个方法的返回值都是boolean类型
// starsWith()方法和endsWith()方法分别用于判断字符串是否以指定的内容开始或者结束。
//这两个方法的返回值都是boolean类型
//1 startsWith(String prefix)方法:该方法用于判断字符串是否以指定的前缀开始
System.out.println("prefix: "+a.startsWith("我"));
// 2 endWith(String suffix) :该方法判断字符串是否以指定的后缀结束
// eg: str.endWith(suffix)
2. 5.toCharArray()
方法可以将字符串转换为一个字符数组
// toCharArray()方法可以将字符串转换为一个字符数组
// eg: str.toCharArray()
char[] ch = a.toCharArray();
for(int i = 0; i< ch.length;i++) {
//System.out.println("数组第"+i + "个元素为: "+ ch[i]);
}
2.6.contains()
该方法可以判断字符串中是否包含指定的内容
// contains(): 该方法可以判断字符串中是否包含指定的内容
// eg: str.contains()
System.out.println(" 是否包含: "+ a.contains("我"));
三.字符串操作
1. substring()方法返回一个新字符串,它是此字符串的一个子字符串
2.replace()方法可以实现将指定的字符串序列替换成新的字符序列
3.split()方法可根据给定的分隔符对字符串进行拆分
4.toLowerCase()方法和toUpperCase()进行大小写
5. trim()方法可以将字符串首位处的空白内容都删除
6.equals()方法比较字符串是否相等
3.1. 截取字符串
substring()方法返回一个新字符串,它是此字符串的一个子字符串,
该字符串从指定的beginIndex处的字符开始,直到索引endIndex -1处的字符
语法:
str.substring(beginIndex);
str.substring(beginIndex , endIndex); //开始索引,结束索引
String c = "123456789886";
System.out.println("截取: "+ c.substring(2,6));
3.2.字符串替换
replace()方法可以实现将指定的字符串序列替换成新的字符序列
str.replace(oldstr, neewstr)
【注意】: replace()方法返回的是一个新的字符串,如果字符串str中没有找到需要被替换的子字符串序列
order,则将原字符串返回。
String d = "qwertyui";
String rd = d.replace("qw", "mn");
System.out.println("替换后: "+rd);
3.3.字符串分割
split()方法可根据给定的分隔符对字符串进行拆分,支持正则表达式,最后返回一个字符串数组
eg: str.split(regex)
String e = "蒸羊羔,蒸熊掌,烧花鸭";
String se[] = e.split(",");
//System.out.println(se);
for(int i =0; i< se.length;i++) {
System.out.println("分割后: " + se[i]);
}
【注意】:分割字符时候,split(" ")有且仅能分割一个字符,如果想要分割多个字符,需要使用正则表达式split("\\s+")
正则表达式\s表示匹配任何空白字符,+表示匹配一次或多次
3.4.大小写转换
toLowerCase()方法:该方法可以将字符串中的所有字符转换为小写。如果字符串中没有应该被转换的字符,
则将原字符串返回,并将原字符串中每个应该进行小写转换的字符都转换为等价的小写字符,故字符
串长度与原字符串长度相等。
语法:str.toLowerCase();
toUpperCase(): 将字符串中所有字符转换为大写。
语法: str.toUpperCase();
String f = "qwertyyuQWERTRRrt";
System.out.println("大写: "+ f.toUpperCase());
System.out.println("小写: "+ f.toLowerCase());
3.5.去除空白内容
trim()方法可以将字符串首位处的空白内容都删除 (记住只有首位处)
语法:str.trim()
String g = " tj ok ";
System.out.println("未去除空白内:[ "+ g + "]");
System.out.println("已去除空白内容:[ "+ g.trim()+"]");
3. 6.比较字符串是否相等
要比较两个字符串对象的内容是否相同,就需要用equals()方法,当且仅当进行比较的字符串不为null,
并且与被比较的字符串内容相同时,结果才为true.
语法: str1.equals(str2)
【注意】: String str = null;和String str = "";;是两种不同的概念,前者是空对象,
没有指向任何引用地址,调用String的相关方法会抛出NullPointerException空指针异常;
""是一个字符串,分配了内存空间,可以调用String的相关方法,只是没有显示任何东西而已。·
String str1 = "Hello";
String str2 = new String("Hello");
String str3 = new String("您好");
String str4 = str2;
// 两个不同引用地址的字符串对象使用"=="判断,结果为false
System.out.println("str1 == str2的结果: "+ (str1 == str2));
// 两个不同引用地址的字符串对象使用"=="判断,结果为fase
System.out.println("str1 == str3的结果: "+ (str1 == str3));
// 两个不同引用地址的字符串对象使用"=="判断,结果为fase
System.out.println("str1 == str4的结果:"+ (str1 ==str4));
// 两个同一个引用地址的字符串对象使用"=="判断,结果为false
System.out.println("str2 == str4的结果: "+ (str2 == str4));
// 两个内容相同的字符串使用equals()方法判断,结果为true
System.out.println("str1.equals(str2): "+ (str1.equals(str2)));
// 两个内容不同的字符串使用equals()方法判断,结果为false
System.out.println("str1.equals(str3): "+ (str1.equals(str3)));
// 两个内容相同的字符串使用equals()方法判断,结果为true
System.out.println("str1.equals(str4): "+str1.equals(str4));
四.可变字符串StringBuffer类
1.StringBuffer类
2.StringBuffer类的创建
3.append方法
4.setCharAt()方法
5.Insert方法
6.delete方法
7.类比于string的方法
4.1.StringBuffer类
是线程安全的可变字符序列,一个类似于String类的字符串缓冲区,
两者本质上是一样的,但StringBuufer的执行效率要比String快很多。另外String类
创建的字符串对象是不可以修改的,而StringBuffer类创建的字符串序列是可以修改的
且容量会随着存放的字符串增加而自动增加。
4.2.创建StringBuffer对象
必须使用关键字new,而不能像String对象那样直接引用字符串常量
StringBuffer sbf = new StringBuffer(); // 创建一个对象,无初始值
StringBuffer sbf3 = new StringBuffer("abc"); // 初始值为"abc"
StringBuffer sbf4 = new StringBuffer(30); // 初始容量为32个字符
4.3 append()方法
可以将参数转换为字符串,然后追加到此序列中。
语法:sbf.append(obj)
其中sbf:是任意StringBuffer对象obj是任意数据类型的对象,例如String ,int ,double , boolean等 都将转换为字符串的表现形式。
StringBuffer sbf5 = new StringBuffer("门前大桥下,");
sbf5.append("游过一群鸭,");
StringBuffer sbf6 = new StringBuffer("快来数一数,");
sbf5.append(sbf6);
int x =123;
sbf5.append(x);
System.out.println(sbf5.toString());
4.4.setCharAt(int index, char ch)
将给定索引处的字符修改为ch
语法: sbf.setCharAt(index, ch)
index: 被替换字符的索引
ch: 替换后的字符
StringBuffer sbf7 = new StringBuffer("门前大桥下,");
sbf7.setCharAt(2, 'q');
System.out.println(sbf7.toString());
4.5.insert(int offset, String str):
将字符串str插入到指定的索引值offset位置上
语法:sbf.insert(offset,str)
StringBuffer sbf8 = new StringBuffer("门前大桥下,");
sbf8.insert(3, "qwert");
System.out.println(sbf8.toString());
4.6. delete(int start, int end)方法
delete()方法可以移除此序列的子字符串中的字符,该字符串是从指定的索引start
处开始,一直到索引end - 1处,如果end-1 超过最大索引范围,则一直到序列尾部
如果startd等于end,则不发生任何更改
语法:sbf.delete(start, end)
StringBuffer sbf9 = new StringBuffer("门前大桥下,");
sbf9.delete(1, 3);
System.out.println(sbf9.toString());
4.7.除了上述几个常用的方法以外,StringBuffer类中还有类似String类的方法
StringBuffer sbf10 = new StringBuffer("ABCDEFG");
System.out.println("sbf10的原值: "+ sbf10);
int length2 = sbf10.length();
System.out.println("sbf10的长度: "+ length2);
char ch10 = sbf10.charAt(5);
System.out.println("索引为5的字符: "+ ch10);
int index5 = sbf10.indexOf("DEF");
System.out.println("DEF的索引位置为: "+ index5);
String substr = sbf10.substring(0,2);
System.out.println("索引0到2之间的字符串: "+ substr);
StringBuffer TEMP = sbf10.replace(1, 5,"123");
System.out.println("替换后的字符串: "+ TEMP);
五.总结
5.1.字符串与String
字符串是常量,这句话说的是双引号之内的文字内容是常量, 但String声明的变量则是String对象
5.2.StringBuffer与String
String只能赋值一次,每一次内容发生改变都生成一个新对象,然后原有对象引用新的对象,所以说String本身是不可能改变的,每一次改变String对的字符串内容都
会在内存中创建新的对象,而每一次生成新对象都会对系统性能产生影响。StringBuffer不同,每次操作都是操作自身对象,而不是生成新对象,其所占空间
会随着字符内容增加而扩充,做大量修改时,不会因产生大量匿名对象而影响系统性能。
参考文献:
https://blog.csdn.net/u010502101/article/details/79162587