У меня есть текстовый файл со значениями города и штата: - Это содержимое моего файла: -

Madhya Pradesh-Bhopal
Goa-Bicholim
Andhra Pradesh-Guntur

Я хочу разделить штат и город ... Вот мой код

   FileInputStream fis= new FileInputStream("StateCityDetails.txt");
    BufferedInputStream bis = new BufferedInputStream(fis);
    int h=0;
    String s;
    String[] str=null;
    byte[] b= new byte[1024];
    while((h=bis.read(b))!=-1){
     s= new String(b,0,h);
    str= s.split("-");
    }
    for(int i=0; i<str.length;i++){
        System.out.println(str[1]);  ------> the value at 1 is Bhopal Goa
    }
       }

Также у меня есть пробел между Мадхья-Прадеш .. Итак, я хочу удалить пробелы между состояниями в файле, а также разделить штат и город и получить следующий результат: -

     str[0]----> MadhyaPradesh
     str[1]----> Bhopal
     str[2]-----> Goa
     str[3]----->Bicholim

Пожалуйста, помогите .. Заранее спасибо :)

1
Bhavana_1622 8 Июл 2016 в 08:19
В чем вопрос? Ваш код не работает? Если нет, то что вы не понимаете?
 – 
Jim Garrison
8 Июл 2016 в 08:21
Код работает нормально, сэр, но результат не такой, как ожидалось ... Я не знаю, как получить ожидаемый результат ..
 – 
Bhavana_1622
8 Июл 2016 в 08:22

1 ответ

Лучший ответ

Я бы использовал здесь BufferedReader, а не так, как вы это делаете. Приведенный ниже фрагмент кода считывает каждую строку, разбивает ее на дефис (-) и удаляет все пробелы из каждой части. Каждый компонент вводится в список в порядке слева направо (и сверху вниз). Список преобразуется в массив в конце, если вам это нужно.

List<String> names = new ArrayList<String>();
BufferedReader br = null;

try {
    String currLine;

    br = new BufferedReader(new FileReader("StateCityDetails.txt"));

    while ((currLine = br.readLine()) != null) {
        String[] parts = currLine.split("-");
        for (int i=0; i < parts.length; ++i) {
            names.add(parts[i].replaceAll(" ", ""));
        }
    }

} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
    if (br != null) br.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

// convert the List to an array of String (if you require it)
String[] nameArr = new String[names.size()];
nameArr = names.toArray(nameArr);

// print out result
for (String val : nameArr) {
    System.out.println(val);
}
1
Tim Biegeleisen 8 Июл 2016 в 09:11
Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 1 в com.psl.Client.main (Client.java:31) names.add (parts [1] .replaceAll ("", "")); <----- он этого не делает .. здесь выдает ошибку
 – 
Bhavana_1622
8 Июл 2016 в 08:57
Можете ли вы приложить какие-либо усилия, чтобы отладить это? Я предполагаю, что в вашем входном файле есть строки, в которых нет дефиса. Я добавил логику, чтобы пропускать такие строки.
 – 
Tim Biegeleisen
8 Июл 2016 в 08:59
Спасибо .. да я попробую ... :) thnx
 – 
Bhavana_1622
8 Июл 2016 в 09:00
Добавьте это после разделения currline и добавления его к строке: - while ((currLine = br.readLine ())! = null) {String [] parts = currLine.split ("-"); for (int i = 0; i <parts.length; i ++) {names.add (parts [i] .replaceAll ("", ""));}} у меня это отлично работает
 – 
Bhavana_1622
8 Июл 2016 в 09:13