格式化Java字符串
我的任务是检查字符串的格式,它必须是浮点数,然后是分号字符串。我如何确保这一点? 我正在读取一个文件并将每一行添加到arrayList中,如果它的格式正确,否则会引发异常格式化Java字符串,java,Java,我的任务是检查字符串的格式,它必须是浮点数,然后是分号字符串。我如何确保这一点? 我正在读取一个文件并将每一行添加到arrayList中,如果它的格式正确,否则会引发异常 if (s.hasNextLine()) //if of specific format then ... items.add(s.nextLine()); //throw ("file of wrong format") 首先,
if (s.hasNextLine())
//if of specific format then ...
items.add(s.nextLine());
//throw ("file of wrong format")
首先,我将尝试用“;”分割字符串。如果它返回一个长度大于1的数组,您就知道它的中心有一个分号 然后检查arary的第一个元素是否为浮点(例如,通过检查
float.parseFloat(…)
是否引发异常)。如果没有失败,您就知道字符串的格式正确
这就是代码中的情况:
public static boolean check(String input) {
String[] split = input.split(";");
if (split.length == 1)
return false;
try {
Double.parseDouble(split[0]);
return true;
} catch (NumberFormatException e) {
return false;
}
}
要将其放入代码段中,请执行以下操作:
if (s.hasNextLine()) {
String next = s.nextLine();
if (check(next))
items.add(next);
else
throw new Exception("Input string(" + next + ") of wrong format.");
}
您可以这样做,创建一个方法并将每个字符串行传递给该方法,如果该方法返回true,则将该行添加到列表中
public static boolean isMatched(String input) {
return input.matches("[+-]?[0-9]+(\\.[0-9]+)?([Ee][+-]?[0-9]+)?;.*");
}
我们可以有两种解决方案。使用正则表达式检查输入字符串的格式,或者解析它并捕获异常(如果有) 下面是显示这两种情况的代码示例 使用正则表达式: 这里的输出将是:
true
false
matches()
方法返回一个布尔值,如果正则表达式匹配则返回true,否则返回false。
注:上面检查输入第二部分的正则表达式上只有字母
使用解析和捕获异常:
在这里,代码检查您的输入是否有两部分,然后检查每个部分的浮点和字符串格式。@jrook
1e42
、0042
、.42
和-4.2
都是您将拒绝的有效浮点数。@Andreas是的,正则表达式是基本的。我并不是说它绝对正确;只需将OP指向这个方向。您应该使用Double
,而不是Float
。作为一般规则,除非有特殊要求,否则切勿使用浮点
,始终使用双精度
。我为什么要使用双精度
?因为此代码不使用值,所以使用双精度
并不重要,但浮点
只有6到9位有效小数精度,这对于几乎任何实际用途来说都太少了,所以养成习惯总是使用double
。在这种情况下,为了得到更大的指数范围,但正如我所说的,这里不是很重要,只是一个指南,这就是为什么我使用“应该”,而不是“必须”。如果你使用扫描仪
,为什么不使用扫描仪
来检查行?是OP决定使用扫描仪,而不是我的。我只是想提供在他们的场景中有用的东西。
true
false
try {
String[] inputString = "-123;helloWorld".split(";", 2);
if(inputString.length != 2) {
throw new IllegalArgumentException("the input contains more than two parts");
}
Float.parseFloat(inputString[0]);
String.valueOf(inputString[1]);
}catch(Exception e) {
//do your exception handling here.
e.printStackTrace();
}