Java 检查文件中的行是否仅以“开始”@&引用;或-&引用;

Java 检查文件中的行是否仅以“开始”@&引用;或-&引用;,java,bufferedreader,readline,Java,Bufferedreader,Readline,我将使用BufferedReader()和readLine()读取一个文件。 结果将写入ArrayList 如果以“@”或“–”开头,我将检查.txt中的每一行。 如果不是,则应抛出InvalidFormatException for(String s:Data) { if (!s.startsWith("@") || !s.startsWith("-")) throw new InvalidFormatException("Invalid Format"); } my

我将使用
BufferedReader()
readLine()
读取一个文件。 结果将写入
ArrayList

如果以“@”或“–”开头,我将检查.txt中的每一行。 如果不是,则应抛出
InvalidFormatException

for(String s:Data) {
    if (!s.startsWith("@") || !s.startsWith("-"))
        throw new InvalidFormatException("Invalid Format");
}
my.txt看起来像:

@1.2.1
- new feature @1.2.0
- new picture
因此,只有当“@”或“-”是行的开头字符时,它才起作用

@1.2.1
- new feature 
new picture
这个例子应该抛出一个异常

我每次尝试都会得到例外


是否有隐藏字符?

您的条件错误,如果第一个字符不是
'@'
并且它不是
'-'
,则要抛出
异常。使用以下命令:

if (!s.startsWith("@") && !s.startsWith("-"))
    throw new InvalidFormatException("Invalid Format");
顺便说一句,如果您只测试第一个字符,您可以这样做:测试第一个字符,而不检查字符串匹配(在这种情况下,您还必须检查是否有第一个字符:非空):


差不多。您的条件是“如果不以
@
开头或不以
-
开头”

尝试使用
&&
(and)代替:


您正在使用的布尔运算符是

您的条件将检查它是否以第一个字符开头,
,或者如果它不以第二个字符开头,则检查它是否以第二个字符开头

由于要检查的内容不是以这两个开头,因此必须使用

将代码替换为:

if (!s.startsWith("@") && !s.startsWith("-"))

我用正则表达式修复了它

for(String s:Data) {
            if (s.matches("[^@-].*$"))
                throw new InvalidFormatException("wrong Format");
        }
if (!s.startsWith("@") && !s.startsWith("-"))
for(String s:Data) {
            if (s.matches("[^@-].*$"))
                throw new InvalidFormatException("wrong Format");
        }