使用java I / O的字符串数组逻辑问题

时间:2010-04-28 17:25:31

标签: java arrays parsing

我需要从文件中读取这样的一行: 5主席12.49 编辑:我希望能够拥有更多的数据。

我需要将每个单词/数字分成不同的数据类型。第一个是int,第二个是String,第三个是double。然后我需要让它们格式化如下: 货号:椅子价格:$ 12.49数量:5

现在我知道如何格式化,我遇到的唯一问题是将字符串元素解析为他们尊重的数据类型(int,string,double)。

我试过了:

String [] lines = lineInput.split(" ");
for(String displayLines : lines) {
    bufferedWriter.write(displayLines);
    bufferedWriter.newLine();
    System.out.println(displayLines);
}

但是只将每个字符串分隔成一个新行,而我在生活中无法弄清楚如何让每一行检查它是int,string还是double。

然后我弄乱了子串,但是无法让它工作。我甚至想过使用mod%函数和if:

if(lines.length % 2 == 0) {it's a string}; 

但这只适用于第一行。

当我说我自己尝试过这个时,请相信我,而不仅仅是尝试一些尝试。我只是放弃了。 StackOverFlow,你是我唯一的希望:(

3 个答案:

答案 0 :(得分:2)

如果你的行格式为[int] [String] [double],你可以这样做:

String [] line = lineInput.split(" ");
int x = Integer.parseInt(line[0]);
String s = line[1];
double d = Double.parseDouble(line[2]);

您可以根据需要对其进行修改,以处理不同格式的行。

答案 1 :(得分:0)

我很困惑为什么你要根据空格分割

但无论如何,我想解决你的问题看看Integer.parseInt(),Double.parseDouble()。如果需要检查某个数字,可以使用适当的正则表达式(请参阅String.matches()方法)。或者一种可能适用于您的情况的脏方法是调用其中一种解析方法,看看它是否会引发异常......

您还可以查看Scanner类,但这可能对您所需要的内容而言过于苛刻。

答案 2 :(得分:0)

首先,一个小的nit:调用你的行“行”分割的字符串数组是误导。警告:未编译或测试。


    String [] words = lineInput.split(" "); 
    if (words.length != 2) 
       System.err.println ("Error parsing line [" + lineInput + "]: " + wrong number of tokens on line");
    else
       try {
         int numberOfItems = Integer.parseInt(words[0]);
         String itemName = words[1];
         double itemPrice = Double.parseDouble(words[2]);
         System.out.println (itemName + " Price: $" + itemPrice + " Quantity: " + numberOfItems);
       } catch (NumberFormatException ex) {
          System.err.println ("Error parsing line [" + lineInput + "]: " + ex);
       }
    }