如何在Java中从字符串中解析整数?

4
我需要从一个字符串中将分子和分母提取出来并存储在两个int类型的变量中。该字符串可能为:"1/-2","4 /0","-2/ 1234"或"5"(在这种情况下,分母为1)。
该字符串中整数和"/"之间可能有空格,但整数内部没有空格。字符串中可能只有一个整数而没有"/"。
有什么想法吗?谢谢。
你好,我结合了你们的答案,它可以工作!谢谢!
s是该字符串。
s = s.trim();
String[] tokens = s.split("[ /]+");
int inputNumerator = Integer.parseInt(tokens[0]);
int inputDenominator = 1;
if (tokens.length != 1)
    inputDenominator = Integer.parseInt(tokens[1]);
4个回答

7
String[] parts = s.split(" */ *");
int num = Integer.parseInt(parts[0]),
    den = Integer.parseInt(parts[1]);

基本上是实现我的建议。不过,我对s.split(" */ *");不太确定,如果你想一次性完成,可以尝试使用正则表达式。 - user1241335
2
我想说的是,通配符可能会导致错误,并且不完全符合OP的要求。最好明确说明代码的作用以及可能出现问题的地方。 - user1241335
没有通配符,* 是一个Kleene星号。正则表达式只消耗/和它前后的任何空格。 - Daniel Lubarov
1
啊,混淆正则表达式和Bash,从来不是一个好主意XD。是的,那应该可以工作,但请为OP添加解释。 - user1241335

3

使用 '/' 作为分隔符,将字符串分隔开来,然后删除所有空格。 之后使用 Integer.parseInt();
为了有效地去除空格,您可以尝试并检查第一个字符串的最后一个字符和第二个字符串的第一个字符,将它们与 ' ' 进行比较,如果匹配,则将其删除。


我有点困惑,因为你没有建议使用String的trim()函数来去除前导和尾随空格。这是有原因的吗? - Korinna
trim函数本质上是一个循环,不包括前导/尾随空格,可能并不总是适用。而且通常情况下速度较慢,特别是当我们有一个长字符串时。我建议使用substring作为第一步,使用-=作为第二步。 - user1241335
但是选择方法应该由 OP 决定,我建议使用 split(regex) 的主要原因是在这种情况下它确实是最有效的方式。 - user1241335


0
希望这可以帮助到你..,
StringTokenizer st= new StringTokenizer(s, "/");   
int inputDenominator,inputNumerator;

if(st.hasMoreTokens()) 
{
String string1= st.nextToken();
string1=string1.trim();
inputNumerator = Integer.parseInt(string1);
}

if(st.hasMoreTokens()) 
{
String string2= st.nextToken();
string2=string2.trim();
inputDenominator = Integer.parseInt(string2);
} 
else{
inputDenominator=1; 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接