JAVA String 类
字符串是常量; 它们的值在创建之后不能改变. 字符串缓冲区支持可变的字符串. 因为 String 对象是不可变的, 所以可以共享它们. 例如:
String str = "abc";
等效于:
- char data[] = {'a', 'b', 'c'};
- String str = new String(data);
注意事项
常用方法
equals() 判断值是否相等
equalsIgnoreCase() 忽略大小写进行对比
toLowerCase() 转小写
toUpperCase() 转大写
toCharArray() 转字符数组
indexOf(String str [, int fromIndex]) 查找字符串位置
lastIndexOf(String str [, int fromIndex]) 查找字符串最后出现位置
subString(int beginIndex, int endIndex) 切割子串
trim() 去除空白
split(String regex) 分割字符串
startWith(String prefix) 以... 开头
endsWith(String suffix) 以... 结尾
charAt(int index) 获取指定位置字符
replace(char oldChar, char newChar) 替换指定字符
valueOf() 指定数据类型变量转字符串
1,toUpperCase(),toLowerCase()
将 String 字符串中所有的字母都转换大小写, 并且不影响原字符串
- String str = "123abcABC 啊哈";
- // 将字符串中所有字母转为小写
- String lowerStr = str.toLowerCase();
- // 将字符串中所有字母转为大写
- String upperStr = str.toUpperCase();
- System.out.println("原字符串:"+str);
- System.out.println("转小写字符串:"+lowerStr);
- System.out.println("转大写字符串:"+upperStr);
打印结果为:
原字符串: 123abcABC 啊哈
转小写字符串: 123abcabc 啊哈
转大写字符串: 123ABCABC 啊哈
2,toCharArray()与 charAt()
toCharArray()方法将 String 类型的变量转换为一个字符数组, 并返回. charAt()方法则类似与把 String 当成一个字符数组, 通过传入下标而得到该位置所对应的字符
例如: 判断一个字符串是否是英文字符
- /**
- * 字符判断函数
- * @param c 要判断的字符
- * @return 字符是否为英文字符或数字
- */
- public static boolean isC(char c) {
- if(c>='a'&&c<'z'){
- return true;
- } else if (c>='A'&&c<='Z') {
- return true;
- } else if (c>='0'&&c<='9') {
- return true;
- } else {
- return false;
- }
- }
- /**
- * 主函数
- * @param args
- */
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- System.out.println("请输入要判断的字符串:");
- String str = scanner.nextLine();
- // 通过 toCharArry 将字符串转成数组, 再通过 foreach 遍历
- for (char c : str.toCharArray()) {
- if(!isC(c)){
- System.out.println("这里面包含了不是英文的字符'"+c+"', 判断终止!");
- return;
- }
- }
- System.out.println("这是个英文字符串");
- }
同样的遍历也可以使用 charAt()来实现:
- char c;
- for (int i = 0; i < str.length(); i++) {
- c = str.charAt(i);
- if(!isC(c)){
- System.out.println("这里面包含了不是英文的字符'"+c+"', 判断终止!");
- return;
- }
- }
- System.out.println("这是个英文字符串");
得到的都是相同的打印结果:
请输入要判断的字符串:
abcdef123.asd
这里面包含了不是英文的字符'.', 判断终止!
请输入要判断的字符串:
abcdef123asd
这是个英文字符串
3,indexOf,lastIndexOf
这两个方法都用来查找字符串在当前字符串中的位置, 唯一区别在于 indexOf 方法是从第 0 个元素开始从前往后找而 lastIndexOf 方法则在第 length()-1 个元素开始从后往前找, 都是找到第一个后就返回, 找不到则返回负数.
- String str = "abc123a...xyzabz";
- // 从第 0 个元素开始从前往后找
- System.out.println(str.indexOf("a"));
- // 从第 2 个元素 (c) 开始从前往后找
- System.out.println(str.indexOf("a",2));
- // 从第 str.length()-1 个元素开始从后往前找
- System.out.println(str.lastIndexOf("a"));
- // 从第 2 个元素开始从后往前找
- System.out.println(str.lastIndexOf("a",11));
得到结果为:
- 0 6 13 6
- 4,startsWith,endsWith
判断字符串是否以某个字符串开头或者结尾, 类似于正则匹配中的 "^" 和 "$", 可以用来判断文件后缀, 以此判断文件类型. 具体不作演示.
5,trim
用来去除字符串中的前面和尾部的空白, 返回该去除空白后的副本, 原字符串不受影响
6,split
条件分割. 该方法传入一个正则表达式字符串, 根据该正则表达式所匹配的字符串对所要操作的字符串进行分割, 返回分割所得的字符串数组. 原字符串同样不受影响
- String str = "(1)abc(2)bcd(3)cde(4)def(5)efg";
- // 通过正则匹配 "(\d)" 来匹配所有带括号的序号
- String spstr[] = str.split("\\(\\d\\)");
- for (String string : spstr) {
- System.out.println(string);
- }
- // 打印分割所得数组长度
- System.out.println("数组长度:"+spstr.length);
打印结果为:
- abc
- bcd
- cde
- def
- efg
数组长度: 6
这里需要注意的是正则一共匹配了五次, 所以所得的数组长度为 6 而不是 5
7,substring
参数:
beginIndex: 开始处的索引(包括)
endIndex: 结束处的索引(不包括)
截取字符串, 前闭后开原则, 返回一个新字符串, 它是此字符串的一个子字符串. 该子字符串从指定的 beginIndex 处开始, 一直到索引 endIndex - 1 处的字符. 因此, 该子字符串的长度为 endIndex-beginIndex.
- String str = "abc123...xyz";
- // 截取从'1'到'.'中间的元素, 前闭后开, 索引从 3 到 6
- String substr = str.substring(3,6);
- System.out.println(substr);
所得打印结果为:
123
这里需要注意的是索引从 1 开始计算, 而非从 0 开始计算
来源: http://www.bubuko.com/infodetail-2671511.html