“阿米戈,你怎么看?继 int 之后最受欢迎的 Java 类是什么?”

“你已经在课程的标题中给了我剧透,艾莉。是String!”

“的确,它是一个剧透。String绝对是无处不在。它有一堆有用的方法,你最好知道。

“该类String是除原始类型之外唯一可以在语句中使用其文字的类switch;编译器以特殊方式处理字符串加法和 String 对象;String对象以特殊方式存储在内存中。基本上,该类String是一个非常特别班。

“此外,该String课程还有一堆辅助类,其目的是进一步简化 Java 中的字符串处理。当你学会所有这些后,很多事情对你来说真的会变得容易得多。”

“我等不及了。”

”好吧,我们就从这个生态系统的核心——类的组织开始String。类的结构String其实很简单:里面是一个字符数组chararray),里面存储了字符串的所有字符。对于例如,这是单词“Hello”的存储方式:

String类的结构

这一点很重要。

其实,这并不完全准确。因为这个String类非常重要,它使用了很多优化,并且数据在内部存储的不是字符数组,而是简单的字节数组。

String 类的方法

该类String有很多方法:仅它就有 18 个构造函数!所以,下面我将只列出最常用的:

方法 描述
int length()
返回字符串中的字符数
boolean isEmpty()
检查字符串是否为空字符串
boolean isBlank()
检查字符串是否仅包含空白字符:空格、制表符、换行符等。
char charAt(int index)
返回字符串中索引位置的字符。
char[] toCharArray()
返回组成字符串的字符数组(副本)
byte[] getBytes()
将字符串转换为一组字节并返回字节数组。
String[] split(String regex)
将字符串拆分为多个子字符串。
String join(CharSequence delimiter, elements)
将多个子字符串连接在一起
String intern()
将字符串放入字符串池。

“这看起来很不错!”

“让我们编写一个程序,将文件路径从 Unix 风格转换为 Windows 风格。Unix 使用字符/分隔文件夹,而 Windows 使用字符\

解决方案 1.使用char数组

代码 笔记
Scanner console = new Scanner(System.in);
String path = console.nextLine();

char[] chars = path.toCharArray();
for (int i = 0; i < chars.length; i++)
   if (chars[i] == '/')
      chars[i] = '\\';

String result = new String(chars);
System.out.println(result);
创建一个 Scanner 对象
从控制台读取一行

将字符串转换为字符数组
在字符上循环
如果字符是/
则将其替换为\. 不要忘记逃跑。

根据字符数组创建一个新字符串。
显示字符串。

解决方案 2.使用split()join()方法:

代码 笔记
Scanner console = new Scanner(System.in);
String path = console.nextLine();

String array[] = path.split("\\/");


String result = String.join("\\", array);


System.out.println(result);
创建一个 Scanner 对象
从控制台读取一行

Convert string to array of strings。该/字符用作分隔符(额外的两个斜杠是双重转义的结果)。连接字符串数组
中的所有字符串。用作分隔符(我们看到它转义了)。 显示字符串。\

解决方案三、使用replace(char oldChar, char newChar)方法:

代码 笔记
Scanner console = new Scanner(System.in);
String path = console.nextLine();

String result = path.replace('/', '\\');

System.out.println(result);
创建一个 Scanner 对象
从控制台读取一行

只需将一个字符替换为另一个字符
(第二个字符被转义)
显示字符串。

“我最喜欢第三种解决方案。但我会同时练习这三种方法。”

“干得好,阿米戈,我看你已经迫不及待想要将新知识付诸实践了,课程结束了。”