在Java中将元素添加到列表中

时间:2011-03-13 09:53:34

标签: java list file

以下是代码:

class Test {
    public static void main (String[] args) throws Exception {
        java.io.File fail = new java.io.File("C:/Users/Student/Desktop/Morze.txt");
        java.util.Scanner sc = new java.util.Scanner(fail);
        while (sc.hasNextLine()) {
             String line = sc.nextLine();
             String[] lst = line.split(" ");
             int[] letter = new int[26];
             int[] sumbol = new int[26];
             for (int i = 0; i < lst.length; i++)
                 System.out.print(lst[i] + " ");
             System.out.println();
                     // How to add?
        }
    }
}

请解释如何将列表字母和符号中的所有字母添加到Sumbol列表中?

文件Morze.txt的内容:

A .- 
B -... 
C -.-. 
D -.. 
E . 
F ..-. 
G --. 
H .... 
I .. 
J .--- 
K -.- 
L .-.. 
M -- 
N -. 
O --- 
P .--. 
Q --.- 
R .-. 
S ... 
T - 
U ..- 
V ...- 
W .-- 
X -..- 
Y -.-- 
Z --.. 

谢谢!

4 个答案:

答案 0 :(得分:1)

你没有列表,你有一个数组。您似乎想要将值添加到两个数组。但是,您的循环中似乎有一些代码不应该在循环中。

此外,您的数据是text / String而不是numbers / int值。

String[] letter = new String[26];
String[] symbol = new String[26];
int count = 0;
while (sc.hasNextLine()) {
    String line = sc.nextLine();
    String[] lst = line.split(" ");
    letter[count] = lst[0];
    symbol[count] = lst[1];
    count++;
}
for (int i = 0; i < count; i++)
    System.out.println(letter[i] + " " + symbol[i]);

答案 1 :(得分:1)

我将提供一个解决方案来修复您的实现,因为我认为它可以帮助您理解一些概念。但是我会建议你一旦工作就回去看看Java List界面并重新编写你的代码。列表是维护可能长度增长或缩小的序列的更清晰的方式,并将大大降低代码的复杂性。

您应该首先将字母和符号数组声明移出while循环。 Java中块中的变量的范围限定在其边界内。换句话说,while循环外没有语句可以看到任何一个数组。这会产生副作用,即使用扫描仪为您解析的每一行创建一个新数组。

    int[] letter = new int[26];
    int[] sumbol = new int[26];
    while (sc.hasNextLine()) {
         String line = sc.nextLine();
         String[] lst = line.split(" ");

接下来,您需要知道将当前符号/字母放在数组中的位置,即索引。因此,您需要计算到目前为止已经处理了多少行/符号。

    int[] letter = new int[26];
    int[] sumbol = new int[26];
    int numberOfSymbolsProcessed = 0;
    while (sc.hasNextLine()) {
         String line = sc.nextLine();
         String[] lst = line.split(" ");

现在你有两个数组和一个索引,将符号和字母添加到数组中,如下所示......

    int[] letter = new int[26];
    int[] sumbol = new int[26];
    int numberOfSymbolsProcessed = 0;
    while (sc.hasNextLine()) {
         String line = sc.nextLine();
         String[] lst = line.split(" ");
         letter[numberOfSymbolsProcessed] = lst[0];
         sumbol[numberOfSymbolsProcessed] = lst[1];
         numberOfSymbolsProcessed = numberOfSymbolsProcessed + 1;

答案 2 :(得分:0)

这将是List接口的一个很好的用例。

   List<String> list = new LinkedList<String>();

   while (sc.hasNextLine()) {
         String line = sc.nextLine();
         list.addAll(Arrays.asList(line.split(" ")));
   }

答案 3 :(得分:0)

如果您知道您的文件将包含字母或符号,那么您可以使用Pattern类并使用正则表达式,例如

^[a-z][A-Z]+$

检查给定的字符串,在你的情况下,它将是lst [i]有一个或多个字母。开头的^和结尾的$确保您在字符串中只有字母。

如果字符串与模式匹配,那么您知道它是一个字母,因此您可以将其添加到Letter列表中。如果没有,您可以将其添加到符号数据结构中。

我建议您不要使用数组,而是使用动态数据结构(例如ArrayList)作为列表,因为这会在向其添加元素时动态增长。

有关模式类的更多信息,您可以查看this教程