😏上课不听人都沙雕,我再旷课我也是沙雕😀

字符串和编码

正侧表达式留坑【正侧表达式】
在Java中,String是一个引用类型,它本身也是一个class。但是,Java编译器对String有特殊处理,使得我们可以直接用"..."来表示一个字符串:

String str = "Hello!";

因为String太常用了,所以Java提供了”…”这种字符串字面量表示方法。
而不是按照char数组的写法

String s2 = new String(new char[] {'H', 'e', 'l', 'l', 'o', '!'});

💻Java字符串的一个重要特点就是字符串不可变。这种不可变性是通过内部的private final char[]字段,以及没有任何修改char[]的方法实现的。

字符串比较

当我们想要比较两个字符串是否相同时,要特别注意,我们实际上是想比较字符串的内容是否相同。必须使用equals()方法而不能用==
因为在equals()和compareTo()比较存储在其中的值字符串变量,在对比,双重等于符号(==)比较
对象的引用是否相同(是否指向同一个对象)。

System.out.println(s1.equals(s2));//ture or false

😀要忽略大小写比较,使用equalsIgnoreCase()方法

汇总

Method Description
contains(anotherString) 如果anotherString是此字符串中的子字符串,则返回true
startWith(prefix) 如果此字符串以指定的前缀开头,则返回true
endWith(suffix) 如果此字符串以指定的后缀结尾,则返回true
equals(anotherString) 如果此字符串等于字符串anotherString,则返回true(区分大小写)
equalsIgnoreCase(anotherString) 如果此字符串等于字符串anotherString,则返回true;否则,返回true(不区分大小写)
compareTo(anotherString) anotherString 可以是一个 Byte, Double, Integer, Float, Long 或 Short 类型的参数【如果指定的数与参数相等返回0;如果指定的数小于参数返回 -1;如果指定的数大于参数返回 1】
compareToIgnoreCase(anotherString) 与compareTo相同,除了比较不区分大小写

搜索字串

💡注意索引号是从0开始的!并且最后一个的索引位置应该是str.length()-1;

/ /是否包含子串:
"Hello".contains("ll"); // true
"Hello".indexOf("l"); // 2
"Hello".lastIndexOf("l"); // 3
"Hello".startsWith("He"); // true
"Hello".endsWith("lo"); // true
//"Hello"可替换为任何字符串名

提取子串

"Hello".substring(2); // "llo"
"Hello".substring(2, 4); //"ll",左闭右开,>=2(3),<4(5)

PS:空字符串不是String str =null;而是String str =“”;

String str =" ";
str.length();//1
String str ="";
str.length();//0
String str =null;
str.length();//4 即null

汇总

Method Description
indexOf(ch) 返回字符串中指定【字符/字符串首】次出现的索引,如果不匹配返回-1
indexOf(ch, fromIndex) 返回fromIndex之后指定【字符/字符串】首次出现的索引(包括fromIndex),如果不匹配,则返回-1
lastIndexOf(ch) 返回字符串中最后一次出现指定【字符/字符串】的索引,如果不匹配返回-1
lastIndexOf(ch, fromIndex) 返回fromIndex之前指定【字符/字符串】的最后一次出现的索引包括formIndex,不批配则返回-1

访问字符串

str.charAt(n);

"Hello".charAt(2);//指向"l"
str.charAt(i);

连接字符串

+
str2.concat(str1)

范例

public class StringConcatenation {
 public static void main(String[] args) {
  String str1 = "This is ";
  String str2 = "my first string";
  int num = 777;
  String str3 = str1.concat(str2); // This is my first string
  String str4 = str1 + str2; // This is my first string
  String str5 = str2.concat(str1); // my first stringThis is
  String str6 = str2 + str1; // my first stringThis is
  String str7 = str1 + num; // This is 777
  String str8 = str1.concat(num); // !!!Error, the concat( ) method expects a String type
 }
}

拼接字符串

拼接字符串使用静态方法join(),它用指定的字符串连接字符串数组:

String[] arr = {"A", "B", "C"};
String s = String.join("*", arr); // "A*B*C"

字符串转换

替换大小写和去除空格

Method Description
toLowerCase( ) 转小写
toUpperCase( ) 转大写
trim( ) 从字符串的两端删除空格字符

⭐️注意:toLowerCase不能直接改变原字符串的大小写。
⭐️注意:使用trim()方法可以移除字符串首尾空白字符,空白字符包括空格,\t\r\n

public class StringConversion {
    public static void main(String[] args) {
     String str1 = " This is my first string ";
     String str2 = str1.toLowerCase(); // ˽ ˽this is my first string˽ ˽
     String str3 = str1.toUpperCase(); // ˽ ˽THIS IS MY FIRST STRING˽ ˽
     String str4 = str1.trim(); // This is my first string
   }
}

类型转换

意基本类型或引用类型转换为字符串
可以使用静态方法valueOf()这是一个重载方法,编译器会根据参数自动选择合适的方法:

String.valueOf(123); // "123"
String.valueOf(45.67); // "45.67"
String.valueOf(true); // "true"
String.valueOf(new Object()); // 类似java.lang.Object@636be97c

把字符串转换为其他类型,需要根据情况
例如int类型

int n1 = Integer.parseInt("123"); // 123
int n2 = Integer.parseInt("ff", 16); // 按十六进制转换,255

把字符串转换为boolean类型:

boolean b1 = Boolean.parseBoolean("true"); // true
boolean b2 = Boolean.parseBoolean("FALSE"); // false

要特别注意,Integer有个getInteger(String)方法,它不是将字符串转换为int,而是把该字符串对应的系统变量转换为Integer

Integer.getInteger("java.version"); // 版本号,11

转换为char[]

String和char[]类型可以互相转换,方法是:

char[] cs = "Hello".toCharArray(); // String -> char[]
String s = new String(cs); // char[] -> String

如果修改了char[]数组,String并不会改变:
这是因为通过new String(char[])创建新的String实例时,它并不会直接引用传入的char[]数组,而是会复制一份,所以,修改外部的char[]数组不会影响String实例内部的char[]数组,因为这是两个不同的数组。
String的不变性设计可以看出,如果传入的对象有可能改变,我们需要复制而不是直接引用。

替换字符串

Method Description
replace(oldChar, newChar) Replace all oldChar by newChar
replaceAll(regx/str, replacement) Replace all string patterns specified by a regular expression or a string by the specified replacement string.
replaceFirst(regx/str, replacement) Replace the first string patterns sp

分割字符串

要分割字符串,使用split()方法,并且传入的也是正则表达式:

String s = "A,B,C,D";
String[] ss = s.split("\\,"); // {"A", "B", "C", "D"}

类型转换

【留坑】

小结

⭐️Java字符串String是不可变对象;
⭐️字符串操作不改变原字符串内容,而是返回新字符串;
⭐️常用的字符串操作:提取子串、查找、替换、大小写转换等;
⭐️使用length()注意长度对应个数,位置是所在长度-1;

【本贴持续更新】🤗

🌈参考廖雪峰老师官网教程以及Maynooth University MIEC Dr.Dong的PPT
【廖雪峰官网链接】
最后修改日期:2019年12月24日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。