大家好我希望将Java中的字符串剥离为字符串和整数,例如:
"String1"
成:
String StringName = "String";
int StringInt = 1;
字符串的长度也可能不同,在Java中有一种简单的方法可以做到这一点,如果容易完成新手就道歉。
答案 0 :(得分:2)
您可以使用正则表达式执行此操作:(.*?)(\\d+)$
让我从最后开始解释这一点。 $
匹配字符串的结尾(我在这里不考虑多行字符串)。 \d
(在java代码中需要转义为\\d
)匹配任何数字,因此最后一个捕获组匹配字符串末尾的整数。第一组匹配前面的所有字符。第一组中需要非贪婪的评估*?
,否则它将匹配整个字符串。
作为一个整体工作的例子:
Matcher m = Pattern.compile("(.*?)(\\d+)$").matcher(yourString);
if (m.matches()) {
String stringPart = m.group(1);
int intPart = Integer.parseInt(m.group(2));
}
答案 1 :(得分:1)
如果数字始终位于字符串的末尾,请编写一个方法,该方法从结尾开始迭代字符串,直到您遇到非整数字符,然后使用您刚刚找到的索引获取子字符串。在大多数情况下,这可能比正则表达式更快,因为对于O(n)
方法,迭代字符串的结尾将为n=[num_integers]
(其中O(1)
)+ substring
。
答案 2 :(得分:1)
String stringName[<maximum length>]
int stringInt;
for( int i = 0; i < originalString.length(); i++){
if(isDigit(originalString[i]){
stringInt = originalString[i];
}
else{
stringName[i] = originalString[i];
}
}
这应该将原始字符串中的所有字符移动到stringName中,除非出现一个将保存在stringInt中的整数值
答案 3 :(得分:-1)
我建议使用正则表达式。
String value = "string12asd";
String intValue = value.replaceAll("[^0-9]", "");
String stringValue = value.replaceAll("[0-9]","");
System.out.println("int are: "+intValue+" \n string are: "+stringValue);
请查看http://www.regular-expressions.info/tutorial.html以获取有关正则表达式的更多详细信息。