2010-07-21 3 views
0

OK 그래서 여기 몇 가지 논리가 생각납니다 ... null/빈 문자열에 도달 할 때까지 문자열을 반복합니다. 문자열 배열 내에 문자열을 넣는 동안 모두 ...java-do while string은 null이 아니거나 비어 있습니다.

다음은 코드 샘플입니다. 나는에서 배열을 사용하지 않는 주장

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()]); 

이 같은

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

} 
} 
+1

"No moare"! 그 의도적 인 오타가 있었습니까? Maineglish를 사용하십니까? 다른 말로하면, 메인 주 출신입니다. 예를 들어 도아를 닫을 수 있습니다. 꽤 flowah입니다. –

+0

"더 이상"이라고 말하지 않습니다. 미안해, 내 영어로. – nn2

+0

데이터 값을 저장하려고합니다.getItems()를 호출하면 한 번만 호출됩니다. 매우 비싼 작업 일 가능성이 높습니다. – Gunslinger47

답변

2

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

String이 ""와 같은지 테스트하려면 'str .isEmpty()'. – Gunslinger47

+0

@ Gunslinger47 당신이 str.isEmpty()를 호출 할 수있는 동안이 경우 우리는 처음에는 null 체크를하기 때문에, 오래된 경우가 많으므로 .equals()를 선호하는 것이 많은 경우에 여전히 좋은 습관입니다. -safe 및 String 인턴은 실제로 덜 효율적이지 않다는 것을 의미합니다. – jayshao

0

뭔가 당신이 후에 무엇이다 : 나는 그것이 잘못하지만 희망이 당신에게 내가 달성하기 위해 노력하고있는 무슨의 아이디어를 줄 알고 그러나 컬렉션 유형에만 모든 것이 붙어 있습니다. 당신이 null 또는 빈 문자열의 첫 번째 occurance에 중지하려면

만 수행

if(null != string && !string.isEmpty()) { 
    tested.add(string); 
    } else { 
    break; 
} 
+0

나는 Collection으로 곧바로 뛰어 오르는 것을 추천하지 않는다. String []이 필요한 인터페이스를 가질 수도 있고, 그것을 선호하는 다른 이유가있을 수도있다. – jayshao

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

수표 또한 비어 있는지 확인해야합니다 ... – jayshao

+0

'wepQty'와'i'는 항상 같습니다. 따라서'i'는 불필요합니다. – Gunslinger47

+0

NullUserException의 대답에 대한 내 의견도 여기에 적용됩니다. http://stackoverflow.com/questions/3296165/java-do-while-string-is-not-null-or-empty/3296174#3296174 – Gunslinger47

0

이됩니다 원본이 컬렉션인지 여부에 따라 고려해야 할 사항은 거의 없습니다.

는 어레이 데이터 [] 데이터

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

Iterable을 구현하면 각 루프에 대해 사용할 수 있습니다. – Gunslinger47

관련 문제