java - 将多个字符串保存到一个字符串中

标签 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的一个索引中?

感谢所有帮助:)

最佳答案

您在 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. 使用正则表达式检查字符串是否为数字而不是捕获异常,更优雅。

由于您格式化文件的方式,此输出有点有趣。您正在解析“”,但在文件中添加了一堆额外的“”字符以使格式看起来不错。这会严重扰乱你的解析。但是,当您修复平面文件的格式时,此方法将正确解析。

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

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      

关于java - 将多个字符串保存到一个字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24316561/

相关文章:

java - <identifier> 地址簿比较器出现预期错误

java - 重新绘制/重新验证 JPanel 不起作用

java - 用Java解析这个字符串

php - 标签 "Filesystem"上的问题

java - ListView 包含复选框滚动问题

java - 使用泛型的链表,出现 "not applicable arguments for parameters"错误

python - 从 Treeview 中选择自动将字符串数字转换为整数

string - 实现字典的最佳数据结构?

java - 如何从Java文件中读取随机行

linux - 什么Linux类相当于CStdioFile