2015-07-12 3 views
2
String str = "1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10th"; 

     int start = 0; 
     int end = 0; 

     int temp3 = str.indexOf(" "); 
     int i = 0; 
     int x = 6; 

     while(i < x){ 
      System.out.println("current start: " + start); 
      start = str.indexOf(" ", temp3); 

      i++; 
      temp3 += str.indexOf(" "); 
     } 
     end = str.indexOf(" ", start + 1); 

     String sample = str.substring(start, end); 
     System.out.println("HERE: " + sample); 

Я пишу программу, которая позволила бы пользователю ввести номер и напечатать определенное место из строки, напримеро IndexOf (»«)

String str = "1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10th"; 

, когда вводимые пользователем 0 , он печатает 1-й или когда он вводит 1, он печатает 2

так, что я решаю, как это сделать - найти индекс двух пространств, который включает определенную строку: «1st" or "2nd" or "3rd"..... и присвоить их индексу две переменные, называемые начальным и конечным. И возьмите оба в качестве параметра подстроки в pri нт конкретной строки

и в приведенной выше коде, это работает, пока переменные й не 6, вот выход:

current start: 0 
current start: 3 
current start: 7 
current start: 11 
current start: 15 
current start: 15 
HERE: 6th 

он повторяет 15 дважды, и строка не должна быть шестой, она должна быть:

0: первый, 1: второй, 2: третий, 3: 4, 4: 5, 5: 6, 6: 7 и так далее ...

, а также не только 6, когда varriable х 10, он также повторить номер 27 дважды

Я пытался найти проблему, но я понятия не имею,

делать кто знает, что это проблема ? и как это исправить?

спасибо

+1

Вы должны смотреть на [ 'раздельным (String регулярных выражений)'] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split (java.lang.String)) метод – Titus

+0

да, сплит работать отлично в моей программе, спасибо :) – user47103

ответ

1

Есть несколько проблем с вашим решением. Строка не заканчивается в пространстве, так что если вы пытаетесь найти конец в

end = str.indexOf(" ", start + 1); 

для последнего элемента, вы получите -1.

Кроме того, когда вы находитесь в цикле вы хотите temp3, чтобы указать на следующее место расположения, но вы назначите темп, как

temp3 += str.indexOf(" "); 

Это всегда добавит 3 к temp3, но когда количество элементов увеличивает количество символов не всегда равно 3, например, «10-й» занимает 4 символа, поэтому вы не можете просто добавить по 3 символа к temp3.

Я думаю, что вам нужно есть что-то вроде

temp3 = start+1 

, и вы скоро поймете, что вам не нужно temp3 вообще.

Проще простого решения было бы разбить строку на пробел и затем вернуть xth-элемент так.

String str = "1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10th"; 

    int x = 6; 

    String[] tokens = str.split(" "); 

    System.out.println(tokens[x]); 
+0

никогда не знаю, есть ли раскол, и да, он работает именно то, что я хочу, спасибо :) – user47103

+0

без проблем, у java есть множество встроенных функций бесплатно! – franklynd

0

Есть несколько вещей, которые нужно обратить внимание в коде, но в основном, ваша ошибка сводится к этой линии:

start = str.indexOf(" ", temp3); // why temp3? 

... в сочетании с необъяснимое:

temp3 += str.indexOf(" "); // no idea what this is trying to do. 

Вместо этого, просто удалите переменную temp3 в целом, и выполнить indexOf так:

start = str.indexOf(" ", start + 1); // start + 1: look right after the last space that was found.