我想用下面列出的另一个字符串替换字符串中的第一个空格字符。该单词可能包含许多空格,但只需要替换第一个空格。我试过下面的正则表达式,但它不起作用......
Pattern inputSpace = Pattern.compile("^\\s", Pattern.MULTILINE);
String spaceText = "This split ";
System.out.println(inputSpace.matcher(spaceText).replaceAll(" "));
编辑::这是我正在使用的外部API,我有约束,我只能使用“replaceAll”..
您的代码不起作用,因为它不考虑字符串的开头和空格之间的字符。
将您的代码更改为:
Pattern inputSpace = Pattern.compile("^([^\\s]*)\\s", Pattern.MULTILINE);
String spaceText = "This split ";
System.out.println(inputSpace.matcher(spaceText).replaceAll("$1 "));
说明:
[^...]
用于匹配与提供的字符或字符类不匹配的字符(\\s
是一个字符类)。
因此,[^\\s]*
是零或更多的非空白字符。它被()
包围在下面。
$1
是第一个出现在()
的东西。
然而,首选的方法是使用replaceFirst
:(虽然这似乎不符合您的要求)
String spaceText = "This split ";
spaceText = spaceText.replaceFirst("\\s", " ");
您可以使用String.replaceFirst()
方法替换模式的第一个出现
System.out.println(" all test".replaceFirst("\\s", "test"));
String.replaceFirst()
内部称Matcher.replaceFirst()
,因此它相当于
Pattern inputSpace = Pattern.compile("\\s", Pattern.MULTILINE);
String spaceText = "This split ";
System.out.println(inputSpace.matcher(spaceText).replaceFirst(" "));
分两步完成:
这个想法是这样的,您可能需要根据API正确调整索引值。
它应该比regexp更快,因为有2x arraycopy而且不需要文本编译模式匹配和东西。
可以使用Apache StringUtils:
import org.apache.commons.lang.StringUtils;
public class substituteFirstOccurrence{
public static void main(String[] args){
String text = "Word1 Word2 Word3";
System.out.println(StringUtils.replaceOnce(text, " ", "-"));
// output: "Word1-Word2 Word3"
}
}
我们可以在Kotlin中使用yourString.replaceFirst(" ", "");
。