当前位置: 首页 > 知识库问答 >
问题:

为什么“replace all”方法不在字符串的开头添加一个空格?

秦浩漫
2023-03-14

我有一个在开头、中间和结尾有多个空白的字符串:“Humpty Dumpty sat”

我使用正则表达式(https://stackoverflow.com/a/2932439/13136767)删除了多余的空白,并将其替换为组1(它是一个空空间)。

String str = "        Humpty   Dumpty   sat  ";
str = str.replaceAll("^ +| +$|( )+", "$1");
System.out.println("[" + str + "]");

预期产出:

[ Humpty Dumpty sat ]

实际产量:

[Humpty Dumpty sat]

替换字符串是在搜索和替换过程中替换每个正则表达式匹配的文本。字符串开头的大空格应该被一个空格替换。为什么没有在字符串的开头加一个空格?

共有2个答案

谭昕
2023-03-14

一个简单的解决方案可以是用一个空白字符替换多个空白字符的序列。

演示:

public class Main {
    public static void main(String args[]) {
        String str = "     Humpty   Dumpty   sat ";
        System.out.println("->" + str + "<-");

        str = str.replaceAll("\\s+", " ");
        System.out.println("->" + str + "<-");
    }
}

输出:

->     Humpty   Dumpty   sat <-
-> Humpty Dumpty sat <-
凌意
2023-03-14

为什么没有在字符串的开头加一个空格?

因为您使用的正则表达式是专门设计的,不会在字符串的开头或结尾添加空格:

str.replaceAll("^ +| +$|( )+", "$1");

这里有三个备选方案:^++$()+。所有三个选项都匹配一个或多个空格。不同的是,前两个仅分别在字符串的开头和结尾匹配,而只有第三个包含捕获组。因此,如果第三个匹配,即如果空格序列不在字符串的开头或结尾,则$1的值将是空格。否则它将是空的。

这样做的全部要点是不要在开头或结尾添加空格。如果你不想要这种行为,你就不需要这种复杂性。只要用一个空格替换一个或多个空格就行了。

 类似资料:
  • 问题内容: 当我尝试在套接字上使用sax解析xml时,遇到了一种奇怪的情况。经过分析,我注意到DataOutputStream在我的数据前面添加了2个字节。 DataOutputStream发送的消息: 使用Transformer发送消息: 可能已经注意到,DataOutputStream在消息前面添加了两个字节。因此,sax解析器将引发异常“ org.xml.sax.SAXParseExcept

  • 问题内容: 因此,我想在字符串中添加一个字符,在某些情况下,我想将该字符加倍,然后将其添加到字符串中(即先添加到字符串本身)。我尝试如下所示。 这引发了一个错误,但是我已经在字符串中添加了一个字符,所以我尝试了: 哪个有效。为什么在求和中包含字符串会导致它起作用?是否添加了一个字符串属性,该字符串属性由于存在字符串而只能在字符转换为字符串时才能使用? 问题答案: 这是因为String + Char

  • 问题内容: 我有一个带有3个嵌套数组的简单php结构。 我不使用特定的对象,而是使用2个嵌套循环构建数组。 这是我要转换为Json的数组的var_dump的示例。 在另一个脚本中,我具有类似的结构并且工作正常。所以我不明白为什么在这里不起作用。 编辑:似乎有编码问题。当返回ASCII,该作品但当它返回UTF8,它不工作了。 Edit2:返回表示:格式错误的UTF-8字符,可能编码不正确。 问题答案

  • 问题内容: 这可能是最简单的事情之一,但我看不到自己在做错什么。 我的输入包括一个带有数字的第一行(要读取的行数),一串包含数据的行和最后一行仅包含\ n的行。我应该处理此输入,并在最后一行之后做一些工作。 我有这个输入: 对于读取输入,我有以下代码。 我的问题是为什么我什么都不打印?程序读取第一行,然后不执行任何操作。 问题答案: 不读取以下换行符,因此第一个(返回 当前 行的其余部分 )将始终

  • 问题内容: 线 打印一个反斜杠()。和 打印双反斜杠()。明白了! 但是为什么在以下代码中: 是输出: 代替 毕竟,该方法是将点()替换为()。 有人可以解释一下吗? 问题答案: 使用正则表达式替换字符时,您可以使用反向引用,例如使用匹配项中的分组替换。 但是,这意味着反斜杠是一个特殊字符,因此,如果您实际上想使用反斜杠,则必须对其进行转义。 这意味着在Java字符串中使用它时实际上需要对其进行两

  • 问题内容: 我有一个文件如下: 我想得到: 我可以编写一个Ruby脚本,但是如果不需要的话更好。 将包含。例如,这是一条路径。 问题答案: 如果包含,则可以使用不在中的任何其他字符,或转义,因此命令变为