我有以下字符串数组(quantityInForPriceBandPopUp [3])数据:
10 - 24
25 - 99
100 - 249
5000+
在C#中,如果我把这个数组放在这个:
quantityInForPriceBandPopUp[i] = quantityInForPriceBandPopUp[i].Remove(quantityInForPriceBandPopUp[i].IndexOfAny(new char[] { ' ', '+' }));
我明白了:
10
25
100
5000
如何在Java中获得相同的结果?理想情况下,我正在寻找一个答案。如果不可能,那么最短的就行了。
答案 0 :(得分:2)
没有有效的单行答案,因为indexOfAny
API中没有与java.lang.String
直接等效的内容。
这是几行中有效的等价物。
int pos = Math.min(Math.max(s.indexOf(' '), -1), Math.max(s.indexOf('+'), -1));
if (pos != -1) {
s = s.substring(0, pos);
}
您可以轻松将其转换为静态辅助方法。
答案 1 :(得分:2)
看一看 http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/StringUtils.html
它有indexOfAny方法和更多字符串方法
答案 2 :(得分:1)
也许不是最有效的,但你可以使用正则表达式和replaceFirst
for (int i = 0; i < arr.length; i++)
{
arr[i] = arr[i].replaceFirst("( |\\+).*$","");
}
基本上,它会找到空格' '
或加号+
的第一个实例,我们必须使用两个\
转义,因为+
也是一个特殊的正则表达式中的符号,以及跟在.*
之后的任何其他字符,直到结束$
,并用空字符串替换它。
如果您需要扩展代码以捕获其他分隔符,例如.
,则只需将分隔符添加到具有另一个|
运算符的组中:
arr[i] = arr[i].replaceFirst("( |\\+|\\.).*$","");
现在,这将编译一个新的正则表达式Pattern每个循环,如果您的数组中有很多字符串,这绝对不是理想的。在这种情况下,您可能会考虑首先在循环外编译单独的模式:
Pattern pattern = Pattern.compile("( |\\+).*$");
for (int i = 0; i < arr.length; i++)
{
arr[i] = pattern.matcher(arr[i]).replaceFirst("");
}
如果你想要之后的部分,像这样的正则表达式会:
for (int i = 0; i < arr.length; i++)
{
arr[i] = arr[i].replaceFirst("^.*( |\\+)\\s*","");
}
注意,如果您仍想为“5000 +”捕获“5000”,则需要修改此项。
制作一个单独的通用正则表达式使用“\ d +”来定位数字可能是值得的,例如:
^(\\d+).*((\\d+)?)$
然后,只需使用匹配器和Matcher.group来挑选特定数字。
相关链接: