我有一个看起来像
的字符串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("")并获得一个数组,然后加入其余部分,但我正在寻找一个更优雅的解决方案,例如可以避免循环的正则表达式
答案 0 :(得分:3)
使用string.replaceFirst
string.replaceFirst("(?m)^(\\d+)\\s+\\d+", "$1");
或强>
string.replaceFirst("\\s+\\d+", "");
答案 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
我希望你明白我的观点