仅替换字符串中的第一个空格

Pho*_*nix 2 java

我想用下面列出的另一个字符串替换字符串中的第一个空格字符.该单词可能包含许多空格,但只需要替换第一个空格.我试过下面的正则表达式,但它不起作用......

Pattern inputSpace = Pattern.compile("^\\s", Pattern.MULTILINE);  
String spaceText = "This split ";    
System.out.println(inputSpace.matcher(spaceText).replaceAll(" "));
Run Code Online (Sandbox Code Playgroud)

编辑::这是我正在使用的外部API,我有约束,我只能使用"replaceAll"..

Duk*_*ing 7

您的代码不起作用,因为它不考虑字符串的开头和空格之间的字符.

将您的代码更改为:

Pattern inputSpace = Pattern.compile("^([^\\s]*)\\s", Pattern.MULTILINE);  
String spaceText = "This split ";    
System.out.println(inputSpace.matcher(spaceText).replaceAll("$1 "));
Run Code Online (Sandbox Code Playgroud)

说明:

[^...]是匹配与提供的字符或字符类不匹配的字符(\\s是一个字符类).

因此,[^\\s]*是零或更多非空白字符.它被()下面包围着.

$1是出现的第一件事().

Java正则表达式参考.

然而,首选的方法是使用replaceFirst:(虽然这似乎不符合您的要求)

String spaceText = "This split ";
spaceText = spaceText.replaceFirst("\\s", " ");
Run Code Online (Sandbox Code Playgroud)


san*_*hat 5

您可以使用该String.replaceFirst()方法替换模式的第一个出现

System.out.println(" all test".replaceFirst("\\s", "test"));
Run Code Online (Sandbox Code Playgroud)

String.replaceFirst()在内部调用Matcher.replaceFirst()所以它等同于

Pattern inputSpace = Pattern.compile("\\s", Pattern.MULTILINE);  
String spaceText = "This split ";    
System.out.println(inputSpace.matcher(spaceText).replaceFirst(" "));
Run Code Online (Sandbox Code Playgroud)