这可能是一个简单的问题,但我一直无法弄清楚。我想在字符串中的某个点之后找到字符串中的下一个字母(A到Z)。我要从下面得到的结果是字符串钱为“ $ 5。00”,但num2始终为-1。
String text = "hello$5. 00Bla bla words that don't matter"
int num1 = text.indexOf('$');
int num2 = text.indexOf("[a-zA-Z]" , num1 + 1); // Always results in -1
String money = text.substring(num1, num2);
答案 0 :(得分:1)
要使用正则表达式查找$
美元符号后面的第一个字母,可以使用以下正则表达式:
\$\P{L}*\p{L}
说明:
\$ Match a $ dollar sign
\P{L}* Match 0 or more characters that are not Unicode letters
\p{L} Match a Unicode letter
字母的索引是匹配子串的最后一个字符,即匹配项end()
之前的一个字符。
示例
String text = "hello$5. 00Bla bla words that don't matter";
Matcher m = Pattern.compile("\\$\\P{L}*\\p{L}").matcher(text);
if (m.find()) {
int idx = m.end() - 1;
System.out.println("Letter found at index " + idx + ": '" + text.substring(idx) + "'");
}
输出
Letter found at index 11: 'Bla bla words that don't matter'
更新
似乎实际问题与上面的回答略有不同,因此要从$
美元符号(含)和后面的所有字符(直到首个字母(不含)或字符串的末尾)捕获文本,请使用此正则表达式:
\$\P{L}*
示例
String text = "hello$5. 00Bla bla words that don't matter";
Matcher m = Pattern.compile("\\$\\P{L}*").matcher(text);
if (m.find()) {
String money = m.group();
System.out.println("money = \"" + money + "\"");
}
输出
money = "$5. 00"
答案 1 :(得分:0)
这未经测试,因为我的工作站未针对Java 9进行设置,但是使用该版本,您应该可以执行以下操作:
String result = text.substring(text.indexOf('$'), text.length())
.takeWhile(ch -> !Character.isAlphabetic(ch))
.map(Object::toString).collect(Collectors.joining());
result
的计算结果为$5. 00
注意:Stream<T>#takeWhile
是Java 9的功能
答案 2 :(得分:-1)
感谢大家的帮助。我找到了一种无需使用正则表达式的方法。
String money = "";
while (!Character.isLetter(text.charAt(num1))) {
money = money + text.charAt(num1);
num1++;
}
稍后可能需要一些工作,但它似乎可以工作。