Извлечение значений, разделенных запятыми, из строки - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь напечатать значение, разделенное запятыми, из строки ниже

A,B,C,D,E

Вот мой код

String Inp = "A,B,C,D,E";
            StringBuilder op = new StringBuilder();
            int Idx = 0;
            int IdxUpto = 0;
            for(;;){

                IdxUpto = Inp.indexOf(",", Idx);
                if(IdxUpto==-1){
                    System.out.println("There is no more commas in String");
                    op.append(Inp.substring(Idx, Inp.length()));
                    System.out.println(op);
                    break;
                }
                op.append(Inp.substring(Idx, IdxUpto));
                Idx = IdxUpto;
                System.out.println(op);
            }   

Для цикла не происходит остановка после первого извлечения, Может кто-нибудь, пожалуйстапомогите, что я делаю НЕПРАВИЛЬНО?

Редактировать:

Ожидаемый результат

A
B
C
D
E

Спасибо

Ответы [ 3 ]

1 голос
/ 06 апреля 2019

Вот неправильная строка в вашем коде:

Idx = IdxUpto;

Вы должны увеличивать плюс один, чтобы учесть, что вам также нужно продвинуться через запятую, ширина которой равна единице.Так что используйте это:

Idx = IdxUpto + 1;

Но учтите, что у вас есть несколько других проблем.Во-первых, вы должны следовать соглашениям Java и избегать начинать имена переменных с заглавных букв.Кроме того, здесь, вероятно, имеет смысл использовать цикл while вместо цикла for без указанных критериев.Учитывая все это, вот рабочая версия вашего скрипта:

String input = "A,B,C,D,E";
StringBuilder op = new StringBuilder();
int idx = 0;
int idxUpto = 0;
do {
    idxUpto = input.indexOf(",", idx);
    if (idxUpto == -1) {
        String term = input.substring(idx, input.length());
        op.append(term);
        System.out.println(term);
        System.out.println("There is no more commas in String");
        break;
    }
    String term = input.substring(idx, idxUpto);
    op.append(term);
    idx = idxUpto+1;
    System.out.println(term);
} while(true);

A
B
C
D
E
There is no more commas in String
0 голосов
/ 06 апреля 2019

Вы можете просто использовать метод String.split() следующим образом:

public class StringSplit {
  public static void main(String[] args) {
    String input = "A,B,C,D,E";
    String[] array = input.split(",");
    for (String letter : array) {
      System.out.println(letter);
    }
  }
}

Вывод:

A
B
C
D
E

0 голосов
/ 06 апреля 2019

Строка indexof API говорит, как показано ниже:

Возвращает индекс в этой строке первого вхождения указанной подстроки, начиная с указанного индекса.

Когда вы вводите условие for, вы получаете индекс как 1 (индексное место, где вы найдете первую запятую).Теперь вы устанавливаете Idx для этого индекса, как показано ниже:

Idx = IdxUpto;

Теперь, так как индекс api начинает поиск запятой по этому индексу, он продолжает говорить, что я нашел в индексе 1, и вы продолжаете пытатьсядля поиска запятой по индексу 1. Чтобы решить проблему, попробуйте добавить одну из следующих:

Idx = IdxUpto + 1;

Несколько замечаний:

a.Используйте соглашения об именах переменных в случае верблюда.
b.Вы добавляете в StringBuilder, если вам нужен требуемый вывод, как ожидалось, тогда ваш оператор println должен измениться на:

System.out.println(Inp.substring(Idx, IdxUpto));//mutate Idx assignment after this print statement.
...