将多个字符串保存到一个字符串

时间:2014-06-19 21:31:51

标签: java string file

我想将多个字符串保存在一个字符串中。事情是,我不知道它可能有多少串。 我正在创建一个程序,从文本文件中读取卡路里并将它们存储在相应的数组中。

以下是文字的部分内容:

 Description of food                         Fat  Food Energy Carbohydrate Protein     Cholesterol Weight Saturated Fat
                                           (Grams) (calories)   (Grams)   (Grams)     (Milligrams) (Grams)  (Grams)


 APPLES, RAW, PEELED, SLICED   1 CUP          0        65          16         0        0       110      0.1
 APPLES, RAW, UNPEELED,2 PER LB1 APPLE        1       125          32         0        0       212      0.1
 APPLES, RAW, UNPEELED,3 PER LB1 APPLE        0        80          21         0        0       138      0.1
 APRICOT NECTAR, NO ADDED VIT C1 CUP          0       140          36         1        0       251       0

现在有了食物名称,我有一个数组foodName。我将读取整个字符串,直到我达到一个int为金额。

这是我到目前为止所做的:

Scanner input = new Scanner("Calories.txt");
while (input.hasNext()) {
    String[] words = input.next().split(" ");
    int lastI;
    for (int i=0; i < words.length; i++) {
        if (isNumeric(words[i])) {
            lastI = i;
            for(int j=lastI; j>=0; j++){
                //What should I put here?
            }
        }
    }
}

public static boolean isNumeric(String str) {
    try {
        double d = Double.parseDouble(str);
    } catch (NumberFormatException nfe) {
        return false;
    }
    return true;
}

对于最里面的for循环,我跟踪最后一个索引,所以我可以从它开始然后向后。

问题1:如果我在第二行倒退,我会复制两行。

问题2:如何在foodName的一个索引中保存名称的所有字符串?

所有帮助表示赞赏:)

1 个答案:

答案 0 :(得分:3)

您在Java中寻找的内容称为StringBuilder。你可以使用它,就像一个字符串,并继续附加到它上面。

File file = new File("output.txt");
Scanner input = new Scanner(file);
StringBuilder sb = new StringBuilder();
while (input.hasNextLine()) {
    String[] words = input.nextLine().split(" ");
    for (int i = 0; i < words.length; i++) {
        if (isNumeric(words[i])) {
            break;
        }
        sb.append(words[i] + " ");
    }
    System.out.println(sb);
    sb = new StringBuilder();
}
input.close();

这样做是逐行读取文件,创建一个字符串数组,分隔“”行。然后,它遍历数组中的每个字符串并检查它是否是数字,如果是,它将打破当前循环并移动到下一行。

我在每行之后打印了StringBuilder,然后重置,你应该用你想要的任何功能替换它。

也为你提供夫妻建议:

  1. 使用CSV文件。用逗号分隔所有内容而不是空格,这使解析非常容易。
  2. 使用正则表达式检查字符串是否为数字而不是捕获异常,它更优雅。
  3. 由于您格式化文件的方式,因此输出结果有点滑稽。你正在解析“”,但你在文件中添加了一堆额外的“”字符,使格式看起来不错。这会非常糟糕地破坏你的解析。但是,当您修复平面文件的格式时,此方法将正确解析。

    此输出为:(请注意,每一行都是一个单独的字符串。您可以看到文件格式如何搞砸了输出)

    Description of food                         Fat  Food Energy Carbohydrate Protein     Cholesterol Weight Saturated Fat 
                                           (Grams) (calories)   (Grams)   (Grams)     (Milligrams) (Grams)  (Grams) 
    
    
     APPLES, RAW, PEELED, SLICED   
     APPLES, RAW, UNPEELED,2 PER LB1 APPLE        
     APPLES, RAW, UNPEELED,3 PER LB1 APPLE        
     APRICOT NECTAR, NO ADDED VIT C1 CUP