Java 检查下一个字符串标记器是否为空

Java 检查下一个字符串标记器是否为空,java,string,stringtokenizer,Java,String,Stringtokenizer,我遇到了一个问题,我使用的文本文件有超过一百万行的数字。数据的格式如下,有些行有3个数据段,而其他行只有2个。 每次文件访问只有2位的数据时,它似乎抛出一个空错误(我使用Try/catch读取输入流) 如果我删除值3标记器,那么程序将运行到底。 我是否需要放置一个if语句来检查第二行之后是否有另一个令牌?如果是-如何 while ((getLine = br.readLine()) != null) { StringTokenizer to

我遇到了一个问题,我使用的文本文件有超过一百万行的数字。数据的格式如下,有些行有3个数据段,而其他行只有2个。 每次文件访问只有2位的数据时,它似乎抛出一个空错误(我使用Try/catch读取输入流)

如果我删除值3标记器,那么程序将运行到底。 我是否需要放置一个if语句来检查第二行之后是否有另一个令牌?如果是-如何

            while ((getLine = br.readLine()) != null)   {
              StringTokenizer tokenizer = new StringTokenizer(getLine);
              String Value1 = tokenizer.nextToken();
              String Value2 = tokenizer.nextToken();
              String Value3 = tokenizer.nextToken();
            //Does some more things
            }
数据

    11      22      33
    44      55      
    77      88      99
    10      11
    13      14
    16      17      18

如果第三次尝试调用
nextToken
,当不存在令牌时,它将返回null。更好的方法是使用
String.split
,在这里可以检查令牌的数量
StringTokenizer
仍然是遗留的

String[] tokens = getLine.split("\\s+");

如果第三次尝试调用
nextToken
,当不存在令牌时,它将返回null。更好的方法是使用
String.split
,在这里可以检查令牌的数量
StringTokenizer
仍然是遗留的

String[] tokens = getLine.split("\\s+");

您必须检查标记器中是否仍有标记。您可以这样做:

String Value3 = tokenizer.hasMoreTokens() ? tokenizer.nextToken() : null;
如果没有第三个令牌,则将
Value3
设置为
null
。您可能希望将其设置为空字符串


另一种方法是使用
getLine.split(\\s+”)
,它将返回一个令牌数组。如果只有2个值,则数组的长度为2。因此,在尝试读取可能不存在的第三个值时要小心。

您必须检查标记器中是否仍有标记。您可以这样做:

String Value3 = tokenizer.hasMoreTokens() ? tokenizer.nextToken() : null;
如果没有第三个令牌,则将
Value3
设置为
null
。您可能希望将其设置为空字符串


另一种方法是使用
getLine.split(\\s+”)
,它将返回一个令牌数组。如果只有2个值,则数组的长度为2。因此,在尝试读取可能不存在的第三个值时要小心。

那么,使用像这样的try-catch块如何

String Value1 = null, Value2 = null, Value3 = null;

try {
    Value1 = null;
    Value2 = null;
    Value3 = null;

    Value1 = tokenizer.nextToken();
    Value2 = tokenizer.nextToken();
    Value3 = tokenizer.nextToken();
} catch (NoSuchElementException nse) {
    // Do Nothing. Just continue..
}
// Does some more things

System.out.println(Value1 + Value2 + Value3);

如果没有读取任何令牌,您将有一个空的“值”。

那么,像这样使用try-catch块怎么样

String Value1 = null, Value2 = null, Value3 = null;

try {
    Value1 = null;
    Value2 = null;
    Value3 = null;

    Value1 = tokenizer.nextToken();
    Value2 = tokenizer.nextToken();
    Value3 = tokenizer.nextToken();
} catch (NoSuchElementException nse) {
    // Do Nothing. Just continue..
}
// Does some more things

System.out.println(Value1 + Value2 + Value3);
如果没有读取任何令牌,您将有一个空“值”。

您有没有尝试过?我想不是。不管怎样,
Scanner
类最近似乎更时髦了。你有没有试过?我想不是。无论如何,
Scanner
类现在似乎更时髦了。