本文为原创文章,转载请注明出处!!
https://blog.csdn.net/featureA/article/details/123476271
--------------------------------------------------------------------------------------------------------------------------------
字符串:Java未提供字符串类型,提供一个string类作为预定义类,,string类实例用“”括起来。
1)、子串:
string类的substring方法可从字符串中提取出一个子串,共两个参数,第一个参数值表示开始截取的位置,第二个参数值表示截取结束的位置,但不包含所处的字符(即不包括参数所在位置的字符),用此方法可易得子串的长度。
2)、拼接:
可使用“+”拼接两个字符串,若拼接的两者类型不同(一者为字符串,一者不为字符串的类型,二者均不是字符串类型则不可拼接,需要进行强制类型转换后再拼接),编译器会自动转换后再进行拼接。若需将多个字符串放在一起,可使用定界符分隔,再使用使用join静态方法把他们组合起来。
3)、字符串修改:
String类没有修改字符串的方法,可对所需修改的字符串先进行提取,然后再拼接。
4)、判断字符串是否相等:
使用equals()方法,该方法返回true或false值,其中括号内的参数可以为字符串变量或字符串;若只检测字符串是否相等而不区分大小写,可以使用equalsIgnoreCase方法,不能使用==判断字符串是否相等,若用此判断,当字符串放在同一位置上时,则相等,否则不会输出true,即位置不同时,即使字符串相同亦不会判断为相等。
5)、空串与null串:
空串是长度为零的字符串,他是一个java对象有自己的长度和内容,长度为零,内容为空。
null串表示该变量既没有内容也没有长度,即没有任和对象与该变量相关联。
检查字符串既不为null也不为空串
(if(str!=null&&str.length()!=0));
6)、码点和代码单元
Java字符串由char值序列组成,char数据类型是一个采用UTF-16编码表示Unicode码点的代码单元,大多数常用Unicode字符使用一个代码单元就可表示,而辅助字符需要用一对代码单元表示。代码单元即为代码的最小存储单元,用十六位来表示,而码点是某个字符对应的代码值。
可用length方法返回字符串长度,若需要得到实际长度,即码点数量,则可调用codePointCount(参数1,参数2)方法,第一个参数表示所需字符串长度的起始位置,第二个参数表示所需字符串长度的结束位置。
调用charAt(n)方法返回位置为n的代码单元,参数n应在字符串长度内,否则会产生异常。
获取第i个位置的码点,则调用offsetByCodePoints(0,i)方法和codePointAt()方法,前者的作用是确定当前位置至所需提取码点的距离,后者的作用为在字符串中获得该码点。如
string str=”hello”;
int index=str.offsetByCode(0,i);
int cp=str.codePointAt(index);)
用codePoints()方法生成一个int值的流,各int值对应一个码点,将其转换为一个数组之后再对字符串进行遍历,可提高字符串遍历效率。
int [] codePoints=str.codePoints().toArray();
把一个码点数组转换为一个字符串:
(string str= new String(str,0,str.length);
示例代码如下:
package corejava.inputtest.code;
/**
* 字符串的相关操作
* @author featureA
*
*/
public class StringAssociate {
public static void main(String[] args) {
String str1="hello";
String str2="word";//定义字符串
System.out.println(str1+str2);//字符串拼接
System.out.println(str1+str2+"!!!!!!");
String str3=str1.substring(0,3);//提取字符串,提取从0-3的字符串
System.out.println(str3);
//使用静态join方法,把多个字符串放在一起
String str4=String.join("/","S","M","L");
System.out.println(str4);
// str2=str2.substring(0,3)+"!";此段代码是下两行代码的整合
//修改字符串,先提取字符串,然后再对字符串进行拼接
str2=str2.substring(0,3);
str2=str2+"!";
System.out.println(str2);
//字符串比较,调用equals方法,不能使用==运算符。
System.out.println(str2.equals(str3));
System.out.println("hello".equals(str1));
//equalsIgnoreCase方法检测字符串是否相等而忽略大小写
System.out.println("Hello".equalsIgnoreCase(str1));
//空串和null串的判断
str3="";
//判断空串
System.out.println(str3.length()==0);
System.out.println(str3.equals(""));
//判断null串
System.out.println(str3==null);
//查看字符串长度
System.out.println(str2.length());
//查看字符串的实际长度,即码点数量
System.out.println(str1.codePointCount(0, str1.length()));
//查看位置为3的代码单元
System.out.println(str1.charAt(3));
System.out.println();
//获得第i个码点;外部方法获得给定位置的码点,
//内部方法获得从零开始位移1后的码点索引
System.out.println(str1.codePointAt(str1.offsetByCodePoints(0, 1)));
//遍历字符串,并且依次查看每一个码点
int i=0;
int cp=str1.codePointAt(i);
if(Character.isSupplementaryCodePoint(cp)) {
i+=2;
}else {
i++;
}
//在遍历过程中实现回退操作
i--;
System.out.println(str1.codePointAt(i));
if(Character.isSurrogate(str1.charAt(i))) {
i--;
}
System.out.println(str1.codePointAt(i));
//使用codePoints方法,生成int值的流,每个int值的对应一个码点,
//将它转换为一个数组后再对数组遍历。
int [] codePoints=str1.codePoints().toArray();
for(int c:codePoints) {
System.out.println(codePoints);
}
//将一个码点数组转换为一个字符串
String str5=new String(codePoints,0,codePoints.length);
System.out.println(str5);
String str="e";
System.out.println(str);
//按照字典顺序,如果字符串位于e之前,返回负数,位于之后返回一个正数,相等返回零。
System.out.println(str1.compareTo(str));
}
}
参考文献:
(美)凯S.霍斯特曼著;周立新等译、《Java核心技术 卷一》北京:机械工业出版社 2016年9月第一版(原书第十版)45-50页
---------------------------------------------------------------------------------------------------------------------------------
本文为原创文章,转载请注明出处!!