java - делать, пока строка НЕ ​​пуста или не пуста - PullRequest
0 голосов
/ 21 июля 2010

ОК, так что вот какое-то логическое мышление ... То, что я пытаюсь сделать, это перебирать строки до тех пор, пока я не нажму пустую / пустую строку ... затем ОСТАНОВИТЬ.Все время, помещая эти строки в массив строк ...

Вот пример кода.Я знаю, что это неправильно, но надеюсь дать вам представление о том, чего я пытаюсь достичь:

int i;
wepN = new String[100];
int wepQty = 0;
boolean anyLeft = true;
while (anyLeft == true) {
for(i = 0;i < 100;i++) {
    if (data.getItems().get(i).getName() == null) {
        anyLeft = false;
        System.out.println(data.getItems().get(i).getName() + " -NO MOARE");
    }
        wepN[i] = data.getItems().get(i).getName();
        wepQty++;

}
}

Ответы [ 5 ]

2 голосов
/ 21 июля 2010

Вы можете использовать break для выхода из цикла for, так же, как и для оператора switch:

String[] wepN = new String[100];                        
int wepQty = 0;

for (int i=0; i < wepN.length; i++) {
    if (data.getItems().get(i).getName() == null || "".equals(data.getItems().get(i).getName())) {
        System.out.println(data.getItems().get(i).getName() + " -NO MOARE");
        break;
    }
    wepN[i] = data.getItems().get(i).getName();
    wepQty++;
}              
0 голосов
/ 21 июля 2010

Есть несколько соображений в зависимости от того, был ли оригинал коллекцией.

Если у вас был массив данных Data [],

String[] dataCopy = new String[data.length];
int i = 0;
for (Data datum: data){
 if (datum==null)break;
 dataCopy[i++] = datum;
}

Но это не оптимально, потому что вы бы присвоили больше ячеек массива, чем необходимо, если бы в исходных данных было 100 ячеек, а в 50-й ячейке была найдена пустая строка.

Использование ArrayList позволило бы JVM управлять расширением ячеек, так что в конце вы просто конвертируете ArrayList в массив с помощью toArray (). На самом деле это не преобразование, но toArray удаляет внутренне управляемый массив из ArrayList.

ArrayList<String> dataList = new ArrayList<String>(data.length);
for (Data datum: data){
 if (datum==null)break;
 dataList.add(datum);
}
String[] dataCopy = {};
dataCopy = datalist.toArray(dataCopy);

Или, если обрабатываемый массив является элементом данных:

ArrayList<String> dataList = new ArrayList<String>(data.length);
for (Data datum: data.getItems()){
 String name = datum.getName();
 if (name==null)break;
 dataList.add(name);
}
String[] dataCopy = {};
dataCopy = datalist.toArray(dataCopy);

Или, если исходная структура данных реализует Iterable. Допустим, класс предметов - Item.

Iterator<Item> itemit = data.getItems().iterator();
ArrayList<String> dataList = new ArrayList<String>(data.length);
while(itemit.hasNext()){
  String name = itemit.next().getName;
  if (name==null)break;
  dataList.add(name);
}
String[] dataCopy = {};
dataCopy = datalist.toArray(dataCopy);
0 голосов
/ 21 июля 2010

Многочисленные способы:

String currentName;
for(i=0;i<100;++i) {
  currentName=data.getItems().get(i).getName();
  if(currentName == null || currentName.length() ==0) {
    break;
  }
  // continue with old code here
}

Если вам не нравятся явные разрывы:

String currentName;
while(anyLeft) {
  currentName=data.getItems().get(i).getName();
  anyLeft= currentName != null && currentName.length() > 0;
  if(anyLeft) {
     // continue with old code here
  }
}
0 голосов
/ 21 июля 2010

почему вы должны использовать, пока здесь?

как насчет:

for (int i = 0; i < 100 && data.getItems().get(i).getName() != null; i++ {
        wepN[i] = data.getItems().get(i).getName();
        wepQty++;
}

или

int i = 0;
while (data.getItems().get(i).getName() != null && i < 100) {
            wepN[i] = data.getItems().get(i).getName();
            wepQty++;
            i++
}
0 голосов
/ 21 июля 2010

Что-то вроде того, что вы ищете:

Collection<String> original = new LinkedList<String>();
original.add("String1");
original.add("String2");
original.add("");
original.add(null);
original.add("String 3");

Collection<String> tested = new LinkedList<String>();

for(String string: original) {
  if(null != string && !string.isEmpty()) {
    tested.add(string);
  }
}

String[] stringArray = tested.toArray(new String[tested.size()]);

Я бы сказал, что вообще не следует использовать массив, а просто придерживайтесь типа Collection.

Если вы хотите остановитьпри первом появлении пустой или пустой строки просто выполните:

if(null != string && !string.isEmpty()) {
    tested.add(string);
  } else {
    break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...