我需要substring
字符串(用户输入),直到第一个字母为止。我无法在indexOf
中使用正则表达式。我这样尝试过:
String stringValue = input.substring(0, input.indexOf([^\\d.]));
答案 0 :(得分:1)
非常简单的解决方案,但这可能有效:
public static void main(String[] args) {
String s = "1248941e189d1";
int index = -1, i = 0;
for (char c : s.toCharArray()) {
if (Character.isLetter(c)) {
index = i;
break;
}
i++;
}
System.out.println(s.substring(0, index));
}
您首先要寻找字符串中的第一个字母,然后只需将子字符串带入索引中即可。
答案 1 :(得分:1)
使用正则表达式查找String
中的第一个字母;没有什么太花哨的,没有技巧:
private static final Pattern LETTER = Pattern.compile("[a-zA-Z]");
// or "\\p{Alpha}", or "\\p{L}", or whatever is needed
// inentionally throws NullPointerException if argument is null
public static int findFirstLetter(String text) {
var matcher = LETTER.matcher(text);
if (matcher.find()) {
return matcher.start();
} else {
return -1; // or throw exception, or ...
}
}
我更喜欢这样做,因为它确实可以满足我的要求(我不想split
或replace
,而只是find
)
答案 2 :(得分:0)
如果您确定您的字符串以数字开头,则可以将其拆分:
lb4 model
请注意,如果它不是以数字开头,则每个不符合\ d的字符的第一个索引都将为空。
答案 3 :(得分:0)
如果您想在首次出现字母之前得到什么,可以使用捕获组来匹配除使用\P{L}
的字母以外的任何字符,然后使用\p{L}
匹配字母。
^(\P{L}+)\p{L}
^
字符串的开头(
捕获第1组
\P{L}+
匹配\p{L}
的相反1倍以上)
\p{L}
匹配来自任何语言的任何字母Pattern pattern = Pattern.compile("^(\\P{L}+)\\p{L}");
Matcher matcher = pattern.matcher("1234x");
if (matcher.find()) {
System.out.println(matcher.group(1));
}
输出
1234
答案 4 :(得分:-2)
这可能对您有用:
A,B,C
100,10,100
2,20,200
3,30,150
在这里,我们先匹配字母和任意字符,然后将匹配项替换为空字符串。