2014-01-13 2 views
1

다음과 같이 문자열 배열이 있으면.Java에서 문자열 조건 때까지 루프를 실행하십시오

String[] name = {"aval", "H ---- ", "Singh", "Sawh", "Raman", " ---- ", "parminder", "kaur", "jaspreet", "asneet", " ---- "}; 

모든 콘텐츠를 "H ----"에서 "----"사이에 복사하고 싶습니다. 즉, "SinghSawhRaman"(제외 "H를 ----"와 "----"해야입니다

이 같은

뭔가 :.

String keywords = ""; 
int j = 0; 
for(int i = 0; i < name.length; i++){ 
if(name[i].contains("H ---- ")){ 
    for(j = i; j < 5; j++){  
    // There problem is j < 5. I want to give a condition when name[i].contains(" ---- ") 
    // but not sure how should I be able to do it. 
    keywords = keywords + name[j]; 
    } 

누군가가 나에게 가장 좋은 방법을 보여 주시겠습니까 것은 할 ?이 당신을 위해 작동해야

답변

3
for(j = i; !name[j].contains(" ---- "); j++){ 
     keywords = keywords + name[j]; 
    } 

, 당신은 어떤 부울 표현식이 될 수있는 for 루프의 중단 조건을 설정할 수 있습니다

편집 :. 난 거기에 ! 필요 조건이 false 일 때 oop이 중단됩니다.

0

equals 대신 contains을 사용하는 이유가 무엇입니까? equals을 사용하여 당신을 위해 또한 좋은 경우

, 당신은이 List 사용할 수 있습니다

String[] name = {"aval", "H ---- ", "Singh", "Sawh", "Raman", " ---- ", "parminder", "kaur", "jaspreet", "asneet", " ---- "}; 
List<String> s = Arrays.asList(name); 
StringBuilder sb = new StringBuilder(); 
for(int i = s.indexOf("H ---- ")+1; i < s.indexOf(" ---- "); i++) 
    sb.append(s.get(i)); 
System.out.println(sb); 
0

내가 그렇게

private static String copyFrom(String[] in, String begin, String end) { 
    StringBuilder sb = new StringBuilder(); 
    boolean start = false; 
    if (in != null) { 
     for (String s : in) { 
      if (!start) { 
       start = s.equals(begin); 
      } else { 
       start = !s.equals(end); 
       if (start) { 
        sb.append(s); 
       } 
      } 
     } 
    } 
    return sb.toString(); 
} 

public static void main(String[] args) { 
    String[] name = {"aval", "H ---- ", "Singh", "Sawh", 
       "Raman", " ---- ", "parminder", "kaur", 
       "jaspreet", "asneet", " ---- "}; 
    String keywords = copyFrom(name, "H ---- ", " ---- "); 
    System.out.println(keywords); 
} 

출력처럼 할 것

SinghSawhRaman 
0
String keywords = ""; 
boolean append = false; 
for(j = 0; j <= name.length; j++) { 
    if(name[j].contains("H----") 
     append = true; 
    if(append) 
     keywords += name[j]; 
    if(name[j].contains("----") { 
     append = false; 
     break; 
    } 
} 

공지 사항 에서 블록을 if(append) 블록 아래로 이동하는 경우 keywords 문자열에서 H---을 제외합니다.

0

당신의 상태에 도달하면 간단히 외부 루프의 탈옥 :

boolean capture = false; 
    for (String n : name) { 
     if (n.contains("H ---- ")) { 
      capture = true; 
     } else if (n.contains(" ---- ")) { 
      break; 
     } else if (capture) { 
      keywords = keywords + n; 
     } 
    } 

H ---- 및 여러 번 다음이다 루프에서 break을하지 않습니다, 대신 단순하게 capture = false을 설정하는 경우 break

두 개의 중첩 루프를 사용하면 이름의 일부를 구성하는 요소를 두 번 읽게되어 비효율적입니다. 의 이름이H ----으로 중첩되지 않는 한 내부 루프를 제거하는 것이 좋습니다.

0
String[] name = {"aval", "H ---- ", "Singh", "Sawh", "Raman", " ---- ", "parminder", "kaur", "jaspreet", "asneet", " ---- "}; 
String key =""; 
boolean flag = false; 
for(String s : name){ 
    if(s.equals("H ---- ")){ 
flag = true; 
} 
if(s.equals(" ---- ")){ 
flag = false; 
} 
if(flag && !s.equals("H ---- ")){ 
key+=s; 
} 
} 
System.out.println(key); 
관련 문제