我有一个String,我成功地在两个特殊字符之间提取文本。
(我的文字是数字,示例 - hi%773%what-i get 773)
我使用praseInt将我的数字子串更改为整数(这是成功的)。
我的程序崩溃并烧毁( praseInt numformat exception), 是我的字符串在特殊字符之间不包含数字的时候。
my_String =“heyhow $ 98765 $ you”工作,我得到98765并且可以轻松解析
my_String =“heyhow $$ areyou”运行时错误
String str = "heyhow$$areyou";
int startIndex = str.indexOf('$');
int lastIndex = str.indexOf('$', i+1);
String nums = str.substring(startIndex + 1, lastIndex);
int stringNumber = Integer.parseInt(nums); <--runtime error cause of no# to parse
提前感谢您的帮助。如果您有一个想法,不涉及使用最好的循环或条件语句!
答案 0 :(得分:2)
请改用:
int stringNumber = nums.length() > 0 ? Integer.parseInt(nums) : 0;
如果数字长度不为零,则会解析数字,否则会将stringNumber
设置为值0
。如果您想要一个空字符串的不同值,请更改它。
如果分隔符之间的字符串不是有效数字,则仍然会失败。如果可能的话:
int stringNumber = 0;
try {
stringNumber = Integer.parseInt(nums);
}
catch (NumberFormatException nx)
// depends on how you want to handle invalid numbers
}
答案 1 :(得分:0)
Java三元运算符可以很好地使用如下:
int stringNumber = (!nums.isEmpty() ?Integer.parseInt(nums):0);
答案 2 :(得分:0)
您最好的选择是正则表达式,因此会检测到标记之间的任何错误数据:
private static int extractInt(String input) {
Matcher m = Pattern.compile("\\$([0-9]+)\\$").matcher(input);
if (! m.find())
return 0;
return Integer.parseInt(m.group(1));
}
请参阅IDEONE了解演示。
答案 3 :(得分:0)
String str = "heywhatsgoing$$youtoday";
int startIndex = str.indexOf('$');
int lastIndex = str.indexOf('$', startIndex+1);
String nums = str.substring(startIndex + 1, lastIndex);
int stringNumber = nums.length() > 0 ? Integer.parseInt(nums) : 0;
这给了我一个值0.
这个答案处理了异常的可能性 AND 给了我一个特定的值,我可以用来处理这个异常。
感谢所有花时间看这个的人。