2013-12-09 3 views
2

В основном, что мне нужно сделать, это сохранить только первые десять слов предложения в массиве. Я знаю из моего кода, что все слова будут сохранены, если их больше 10, но я повторяю только цикл 10 раз, чтобы он остановился. Однако, если предложение имеет менее 10 слов, мне нужно заполнить его пустой строкой. Поэтому я могу заставить его работать, если у него 10 или более слов. Однако я не могу заставить его работать, если есть менее 10 слов. Кто-нибудь знает, как заставить его работать? Я должен иметь размер массива 10.Разделение строки в массив, который был определен

String[] tempString = new String[10]; 
    tempString = sentence.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+"); 
    for(int i = 0; i < tempString.length; i++) 
    { 
     System.out.println(tempString[i]); 
    } 

EDIT:

Итак, по существу, если я вошел в предложение: «один два три четыре пять шесть семь восемь девять десять,» это будет работать. Однако, если я введу «один, два, три», это даст мне исключение ArrayOutofBoundsException. Мне нужны другие 7 индексов, которые нужно заполнить, - это пустая строка.

ответ

2

Вы можете использовать следующее:

for(int i = 0; i < 10; i++) 
    { 
     if (i < tempString.length) 
      System.out.println(tempString[i]); 
     else 
      System.out.println(""); 
    } 

Так как вам нужно 10 гравюр, то вы итерацию в 10 раз. На каждой итерации вы проверяете, что вы все еще находитесь в разделенном массиве строк. Если вы просто не заполняете остальное пустым пространством, как хотите.

+0

Это более эффективный выбор для меня. Спасибо! – tjg92

0

Есть 2 способа для достижения этой цели ..

  1. Initailize все строки, чтобы очистить «» (в цикле ..) перед вызовом для цикла, показанного в коде.

  2. После того, как цикл, если длина меньше, чем 10, а затем установить остальные пункты в ""

    , если (tempString.length < 10);

    int diff = 10 - tempString.length -1;

раз Loop дифференциалов и добавить "" каждый раз ..

К сожалению о форматировании ..

0
String[] tempString = Arrays.copyOf(sentence.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+"), 10); 
1

сделать как этот

if(tempString.length<10) 
    tempString = Arrays.copyOf(tempString, 10); 
1
String[] tempString = new String[10]; 
tempString = sentence.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+"); 

Две вышеуказанные строки не имеют большого смысла. Первая строка создает новый массив длиной 10 и присваивает его переменной tempString, но во второй строке говорится: давайте забудем об этом массиве и перейдем к новому массиву, содержащему все слова предложения, переменной tempString.

Так что вам на самом деле нужно две переменные:

String[] result = = new String[10]; 
String allWords = sentence.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+"); 

// now copy at most 10 elements from allWords to result: 
for (int i = 0; i < result.length && i < allWords.length; i++) { 
    result[i] = allWords[i]; 
} 

// and now initialize the rest of the array with empty strings 
for (int i = allWords.length; i < result.length; i++) { 
    result[i] = ""; 
} 
Смежные вопросы