删除空格包围的第一个数字

时间:2015-06-11 00:37:02

标签: java regex

我有一个看起来像

的字符串
2 3 5 5 5

我需要删除此字符串中的第二个数字,这是最简单的方法吗? 输出应该是:

2 5 5 5

更多例子: 输入:

1 4 23 44 52 62

输出:

1 23 44 52 62

输入:

5 2 3 4

输出:

5 3 4

修改 我知道我可以调用.split("")并获得一个数组,然后加入其余部分,但我正在寻找一个更优雅的解决方案,例如可以避免循环的正则表达式

7 个答案:

答案 0 :(得分:3)

使用string.replaceFirst

string.replaceFirst("(?m)^(\\d+)\\s+\\d+", "$1");

string.replaceFirst("\\s+\\d+", "");

DEMO

答案 1 :(得分:0)

这条线上的东西可行:

String str = "2 3 5 5 5";

int first = str.indexOf(" ");
int second = str.indexOf(" ", first +1);

if (second > -1)
  return str.subString(0, first) + str.subString(second);

答案 2 :(得分:0)

我不太熟悉Java的字符串实用程序,但如果可能的话,你可以循环遍历字符串中的每个字符,并记录前两个空格字符(x和y)的位置。然后你可以从0开始并且x个字符长的子字符串,然后将它连接到从y开始并转到字符串末尾的子字符串。

我现在正在打电话,谷歌键盘并不完全适合代码,很抱歉我无法完全实现。

答案 3 :(得分:0)

没有足够的上下文来说明最优雅的解决方案是什么,但由于您不想使用拆分,另一个选项是使用正则表达式:

Matcher m = java.util.regex.Pattern.compile("(\\d[ ]*)(\\d)[ ]*(.*)").
        matcher("5 2 3 4");
if (m.matches()) {
    System.out.println(m.group(1) + m.group(3));
}

在这种情况下的输出是:

5 3 4

我认为使用正则表达式的好处是,如果设置略有不同,您可以轻松地调整它们。例如,如果不是所有数字,而是在开头或类似的地方获得任意字符串。

习惯正则表达式可能需要一些时间,但网上有大量文档,当然,你可以在这里发布另一个问题:)。

希望它有所帮助!

答案 4 :(得分:0)

也许:

String s = "1 4 23 44 52 62".replaceFirst("(\\s[0-9]+\\s)", " ");

答案 5 :(得分:0)

这是C#语法,但你应该能够很容易地翻译它。

public string RemoveSecondNumber(string s)
{
    string[] split = s.Split(' ');
    List<string> output = split.ToList();

    output.RemoveAt(1);

    return String.Join(" ", output);
}

答案 6 :(得分:0)

您可以 分割数组,然后删除第二个数组index 然后将其余的数组部分再次放在一起,如下所示:

StringTokenizer st = new StringTokenizer("2 3 5 5 5", " ");

打印数组输出以查看结果

while (st.hasMoreElements()) {
        System.out.println("StringTokenizer Output: " + st.nextElement());
    }

有关详情,请查看This Link

我希望你明白我的观点