2013-09-18 3 views
1

Я использую для каждого цикла для каждого элемента массива строк и проверки конкретных характеристик этих строк. Мне нужно получить доступ к следующему элементу в этом цикле, если текущий показывает желаемый символ. Таким образом, текущее значение является всего лишь индикатором для меня, что следующий - тот, который мне нужен для grep и process. Есть ли способ сохранить текущий и обработать правую следующую?Как получить доступ к следующему элементу для каждого цикла в Java?

благодарит

+0

Что вы пробовали до сих пор? Это работает? Пожалуйста, укажите пример ввода, желаемый результат и то, что дает ваше текущее решение в результате. –

+0

С некоторыми обманами вы можете это сделать, но, вероятно, проще использовать другой цикл. – Henry

ответ

10

Вам либо нужно использовать индексированный контур.

for(int i=0;i<strings.length-1;i++) { 
    String curr = strings[i]; 
    String next = strings[i+1]; 
} 

или вам необходимо сравнить текущее состояние с предыдущим не следующим.

String curr = null; 
for(String next: strings) { 
    if (curr != null) { 
     // compare 
    } 
    curr = next; 
} 
1

Вы можете использовать continue;, чтобы пропустить текущую итерацию и перейти к следующему. Сохраните значение в переменной, чтобы использовать его.

1

Вы можете попробовать так:

String myArray[]= { "this","is","the","value"}; 
...... 
int counter=0; 
for(String x:myArray){ 
    counter++; 
    if(x.equals("value")){ 
    System.out.println(counter); 
    } 
} 

Это будет цикл массива, и если условие выполнено, то соответствующее сообщение будет печатать. В этом случае он будет печатать 4

1

Вам нужно изменить, если из цикла for-each-loop в обычный цикл for.

String[] strings = new String[]{"aaa","bbb","ccc"}; 

for (int i = 0; i < strings.length; i++) { 
    if (strings[i].equals("aaa")) { 
     i++; 
     String anotherValue = strings[i]; 
    } 
} 
+0

Я сделал это на самом деле, просто хотел узнать, есть ли какие-либо возможности сделать это differnetly. – dhssa

+0

Если вы используете его для разбора команд, есть библиотека сообщества Apache с этой функциональностью. – AppX

3

Вы можете попробовать что-то вроде этого

String valBefore=new String(); 
    boolean flag=false; 
    for (String i:str){ 
     if(i.equals("valueBeforeTheExpectedValue")){ 
      valBefore=i; 
      flag=true; 
      continue; 
     } if (flag){ 
      // Now you are getting expected value 
      // while valBefore has previous value 
      flag=false; 
     } 
    } 
0

Согласно ур необходимости я сделал образец кода здесь ...

` общественного класса One {

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    String stringArray[]={"Dinakar","DinaNath"}; 
    for(String singleString:stringArray) 
    { 
     if(singleString.charAt(0)=='D') 
     { 
      // process with singleString here 
      System.out.print("Got it ");//my work done 
      break; 
     } 

    } 
} 

}

` Удачи, если какие-либо проблемы снова свяжутся со мной.

1

Не элегантный, но может работать для некоторых вещей. Добавить дополнительный элемент в списке:

List<String> stringsOnList= new ArrayList<String>(Arrays.asList(new String[]{ "1" , "2", "3" })); 
    String currentString = null; 
    stringsOnList.add(""); // add extra element for the extra loop 
    for(String nextString : stringsOnList){ 
     if(currentString==null){ 
      currentString=nextString; 
      continue; 
     } 
     //Do stuff e.g.: { 
     System.out.println("Current:"+currentString+", next: "+nextString); 
     // } 

     currentString=nextString; // current is next 
    } 

Выход:

Current:1, next: 2 
Current:2, next: 3 
Current:3, next: 
Смежные вопросы