Как прочитать строку (файл) в массив в Java - PullRequest
3 голосов
/ 02 декабря 2010

Предположим, существует файл с именем SUN.txt

Файл содержит: a, b, dd, ss,

Я хочу создать динамический массив в зависимости от количества атрибутов в файле,Если есть символ после запятой, то массив будет 0-4, то есть длиной 5. В вышеупомянутом случае нет символа, который возвращает 0-3 Массив длины 4. Я также хочу прочитать NULL после запятой.

Как мне это сделать?

Sundhas

Ответы [ 6 ]

4 голосов
/ 02 декабря 2010

Вы должны подумать о

  • Чтение файла в строку
  • Разделение файла по разделителю ','
  • Использование списка для добавления символов и преобразования списка в массив при заполнении списка
3 голосов
/ 02 декабря 2010

Как сказал Маркус, ты хочешь сделать что-то подобное ..

//Create a buffred reader so that you can read in the file
    BufferedReader reader = new BufferedReader(new FileReader(new File(
            "\\SUN.txt")));
    //The StringBuffer will be used to create a string if your file has multiple lines
    StringBuffer sb = new StringBuffer();
    String line;

    while((line = reader.readLine())!= null)
    {
        sb.append(line);
    }

    //We now split the line on the "," to get a string array of the values
    String [] store = sb.toString().split(",");

Я не совсем понимаю, почему вы хотите NULL после запятой? Я предполагаю, что вы имеете в виду после последней запятой вы хотели бы, чтобы это было нулевым в вашем массиве? Я не совсем вижу в этом смысла, но вопрос не в этом.

Если это тот случай, когда вы не читаете в NULL, если после запятой есть пробел, вы можете прочитать это в.

Если вы хотите получить значение NULL, вам нужно добавить его в конце, чтобы вы могли сделать что-то вроде

//Create a buffred reader so that you can read in the file
    BufferedReader reader = new BufferedReader(new FileReader(new File(
            "\\SUN.txt")));
    //Use an arraylist to store the values including nulls
    ArrayList<String> store = new ArrayList<String>();
    String line;
    while((line = reader.readLine())!= null)
    {
        String [] splitLine = line.split(",");
        for(String x : splitLine)
        {
            store.add(line);
        }
        //This tests to see if the last character of the line is , and will add a null into the array list
        if(line.endsWith(","))
            store.add(null);
    }

    String [] storeWithNull = store.toArray();
1 голос
/ 02 декабря 2010

Ну, если вы хотите просто открыть файл и сохранить содержимое в массиве строк, тогда

1) открыть файл в строку

2) разбить строку с помощью регулярного выражения "," http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#split(java.lang.String)

но мне любопытно, почему вы не можете напрямую использовать файл String?

0 голосов
/ 02 декабря 2010

Считайте файл, используя BufferedReader, по одной строке за раз.

Используйте split(",", -1) для преобразования в массив String[], включая пустые строки после последней запятой, как часть вашего массива.

Загрузите детали String[] в List.

0 голосов
/ 02 декабря 2010

это похоже на CSV-файл, что-то вроде этого будет работать при условии, что в нем 5 строк и 5 значений

String [][] value = new String [5][5];
File file = new File("SUN.txt");
BufferedReader br  = new BufferedReader(new FileReader(file));
String line = null;
int row = 0;
int col = 0;

while((line = br.readLine()) != null ){ 
StringTokenizer s = new StringTokenizer(line,",");

    while (s.hasMoreTokens()){
    value[row][col] = s.nextToken();
    col++;
}
col = 0;
row++;
}

я не проверял этот код

0 голосов
/ 02 декабря 2010

Для вашей структуры данных используйте список массивов. Каждая запись списка представляет собой строку вашего текстового файла, каждая запись представляет собой массив, содержащий значения, разделенные запятыми:

List<String[]> data = new ArrayList<String[]>();
String line = readNextLine();  // custom method, to be implemented
while (line != null) {
  data.add(line.split(","));
  line = readNextLine();
}

(при условии, что ваш файл содержит 1..n строк значений, разделенных запятыми)


Возможно, вы захотите, чтобы это было так:

"a,b,c,d,"  -> {"a", "b", "c", "d", null}

Вот предложение, как решить эту проблему:

List<String[]> data = new ArrayList<String[]>();
String line = readNextLine();  // custom method, to be implemented
while (line != null) {
  String[] values = new String[5];
  String[] pieces = line.split(",");
  for (int i = 0; i<pieces.length; i++)
     values[i] = pieces[i];
  data.add(values);

  line = readNextLine();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...