java - 当string不为null或为空时执行

时间:2010-07-21 03:45:24

标签: java arrays for-loop

好的,所以这里有一些逻辑思考...我想要做的是循环遍历字符串,直到我点击空/空字符串..然后停止。所有这些都把这些字符串放在字符串数组中......

以下是代码示例。我知道这是错的,但希望能让你知道我想要实现的目标:

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 个答案:

答案 0 :(得分:2)

你可以使用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++;
}              

答案 1 :(得分:0)

这样的事情就是你所追求的:

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;
}

答案 2 :(得分:0)

无数种方式:

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
  }
}

答案 3 :(得分:0)

为什么你需要在这里使用?

怎么样:

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++
}

答案 4 :(得分:0)

根据原件是否为集合,需要考虑一些因素。

如果您有数组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管理单元格的扩展,这样在结束时你只需使用toArray()将ArrayList转换为数组。它实际上不是转换,但是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);
相关问题