格式化Java字符串

格式化Java字符串,java,Java,我的任务是检查字符串的格式,它必须是浮点数,然后是分号字符串。我如何确保这一点? 我正在读取一个文件并将每一行添加到arrayList中,如果它的格式正确,否则会引发异常 if (s.hasNextLine()) //if of specific format then ... items.add(s.nextLine()); //throw ("file of wrong format") 首先,

我的任务是检查字符串的格式,它必须是浮点数,然后是分号字符串。我如何确保这一点? 我正在读取一个文件并将每一行添加到arrayList中,如果它的格式正确,否则会引发异常

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();
}