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

时间:2013-07-15 15:35:41

标签: java

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

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

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

5 个答案:

答案 0 :(得分:7)

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

将您的代码更改为:

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

<强>解释

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

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

$1()中出现的第一件事。

Java regex reference

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

String spaceText = "This split ";
spaceText = spaceText.replaceFirst("\\s", "&amp;emsp;");

答案 1 :(得分:5)

您可以使用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("&amp;emsp;"));

答案 2 :(得分:1)

分两步完成:

  1. indexOf(“”)会告诉你索引在哪里
  2. result = str.substring(0,index)+ str.substring(index + 1,str.length())
  3. 这个想法是这样的,您可能需要根据API正确调整索引值。

    它应该比regexp更快,因为有2x arraycopy而且不需要文本编译模式匹配和东西。

答案 3 :(得分:1)

可以使用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"
    }

}

答案 4 :(得分:0)

我们可以在Kotlin中简单地使用yourString.replaceFirst(" ", "");