任务描述:
请从键盘获取一串字符,然后实现删除字符串空格的操作。
任务要求:
代码示例:
这里提供两种方法
1.使用正则表达式(推荐)
// 用正则表达式的方法
System.out.println("删除空格后的的字符串:" + str.replaceAll("\\s+",""));
正则表达式语法解析:
\s:在正则表达式中,\s 是一个特殊字符类,代表任何空白字符。这里的空白字符通常包括空格(ASCII 码 32)、制表符(tab,ASCII 码 9)、换页符(form feed,ASCII 码 12)、换行符(line feed,ASCII 码 10)、回车符(carriage return,ASCII 码 13)以及垂直制表符(vertical tab,ASCII 码 11)。简而言之,\s 可以匹配文本中常见的各种水平和垂直空白。
+:这是一个量词,表示前面的模式(在这个例子中是 \s)必须至少出现一次,但可以连续出现多次。也就是说,\\s+ 将匹配一个或多个连续的空白字符。
应用到 replaceAll 方法:
在 Java 中,String 类的 replaceAll 方法接受两个参数:
第一个参数是正则表达式模式,即要查找的目标子串。
第二个参数是替换字符串,即找到目标子串后用什么来替换它。
当调用 str.replaceAll("\\s+", "") 时:
正则表达式 \\s+ 被用来在字符串 str 中查找所有一个或多个连续空白字符构成的子串。
找到这样的子串后,用空字符串 "" 替换它们。因为替换字符串是空的,相当于移除了这些匹配到的空白字符。
综上所述,通过使用正则表达式 \\s+ 并结合 String 类的 replaceAll 方法,可以有效地从字符串中移除(或者说删除)所有连续的空格、制表符等空白字符。这样处理后,输出的字符串就不会包含任何原先存在的连续空白字符。
2. 不使用正则表达式
//不用正则表达式的方法
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
str = str.substring(0, i) + str.substring(i + 1);
i--;
}
}
System.out.println("删除空格后的的字符串:" + str);
该函数用于移除字符串中指定位置的空格。通过遍历字符串的每个字符,当遇到空格时,将字符串分为两部分,分别是空格前的部分和空格后的部分,然后将这两部分重新组合起来,并更新字符串。遍历过程中,需要将索引i减1以重新检查新组合后的字符串的前一个字符。
package April_2024;
import java.util.Scanner;
public class a240415_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入一行字符串(不超过255个字符): ");
String str = sc.nextLine();
//不用正则表达式的方法
// for (int i = 0; i < str.length(); i++) {
// if (str.charAt(i) == ' ') {
// str = str.substring(0, i) + str.substring(i + 1);
// i--;
// }
// }
// System.out.println("删除空格后的的字符串:" + str);
// 用正则表达式的方法
System.out.println("删除空格后的的字符串:" + str.replaceAll("\\s+",""));
}
}