Java: метод для получения позиции соответствия в String?

String match = "hello"; String text = "0123456789hello0123456789"; int position = getPosition(match, text); // should be 10, is there such a method? 

Семейство методов, которые это делают:

  • int indexOf(String str)
    • indexOf(String str, int fromIndex)
  • int lastIndexOf(String str)
    • lastIndexOf(String str, int fromIndex)

Возвращает индекс в этой строке первого ( или последнего ) вхождения указанной подстроки [поиск вперед ( или назад ), начинающийся с указанного индекса].


 String text = "0123hello9012hello8901hello7890"; String word = "hello"; System.out.println(text.indexOf(word)); // prints "4" System.out.println(text.lastIndexOf(word)); // prints "22" // find all occurrences forward for (int i = -1; (i = text.indexOf(word, i + 1)) != -1; i++) { System.out.println(i); } // prints "4", "13", "22" // find all occurrences backward for (int i = text.length(); (i = text.lastIndexOf(word, i - 1)) != -1; i++) { System.out.println(i); } // prints "22", "13", "4" 

Это работает с использованием регулярного выражения.

 String text = "I love you so much"; String wordToFind = "love"; Pattern word = Pattern.compile(wordToFind); Matcher match = word.matcher(text); while (match.find()) { System.out.println("Found love at index "+ match.start() +" - "+ (match.end()-1)); } 

Вывод :

Нашел «любовь» по индексу 2 – 5

Главное правило :

  • Поиск в регулярном выражении слева направо, и после использования символов совпадения его нельзя использовать повторно.
 text.indexOf(match); 

См. Строку javadoc

Поиск единственного индекса

Как говорили другие, используйте text.indexOf(match) чтобы найти одно совпадение.

 String text = "0123456789hello0123456789"; String match = "hello"; int position = text.indexOf(match); // position = 10 

Поиск нескольких индексов

Из-за комментария @ StephenC о поддерживаемости кода и моей собственной трудности в понимании ответа @polygenelubricants я хотел найти другой способ получить все индексы соответствия в текстовой строке. Следующий код (который изменен из этого ответа ) делает следующее:

 String text = "0123hello9012hello8901hello7890"; String match = "hello"; int index = text.indexOf(match); int matchLength = match.length(); while (index >= 0) { // indexOf returns -1 if no match found System.out.println(index); index = text.indexOf(match, index + matchLength); } 

Используйте string.indexOf, чтобы получить начальный индекс.

Вы можете получить все совпадения в файле, просто назначив внутри while-loop, cool:

 $ javac MatchTest.java $ java MatchTest 1 16 31 46 $ cat MatchTest.java import java.util.*; import java.io.*; public class MatchTest { public static void main(String[] args){ String match = "hello"; String text = "hello0123456789hello0123456789hello1234567890hello3423243423232"; int i =0; while((i=(text.indexOf(match,i)+1))>0) System.out.println(i); } } в $ javac MatchTest.java $ java MatchTest 1 16 31 46 $ cat MatchTest.java import java.util.*; import java.io.*; public class MatchTest { public static void main(String[] args){ String match = "hello"; String text = "hello0123456789hello0123456789hello1234567890hello3423243423232"; int i =0; while((i=(text.indexOf(match,i)+1))>0) System.out.println(i); } } 
 int match_position=text.indexOf(match); 
 import java.util.StringTokenizer; public class Occourence { public static void main(String[] args) { String key=null,str ="my name noorus my name noorus"; int i=0,tot=0; StringTokenizer st=new StringTokenizer(str," "); while(st.hasMoreTokens()) { tot=tot+1; key = st.nextToken(); while((i=(str.indexOf(key,i)+1))>0) { System.out.println("position of "+key+" "+"is "+(i-1)); } } System.out.println("total words present in string "+tot); } } в import java.util.StringTokenizer; public class Occourence { public static void main(String[] args) { String key=null,str ="my name noorus my name noorus"; int i=0,tot=0; StringTokenizer st=new StringTokenizer(str," "); while(st.hasMoreTokens()) { tot=tot+1; key = st.nextToken(); while((i=(str.indexOf(key,i)+1))>0) { System.out.println("position of "+key+" "+"is "+(i-1)); } } System.out.println("total words present in string "+tot); } } в import java.util.StringTokenizer; public class Occourence { public static void main(String[] args) { String key=null,str ="my name noorus my name noorus"; int i=0,tot=0; StringTokenizer st=new StringTokenizer(str," "); while(st.hasMoreTokens()) { tot=tot+1; key = st.nextToken(); while((i=(str.indexOf(key,i)+1))>0) { System.out.println("position of "+key+" "+"is "+(i-1)); } } System.out.println("total words present in string "+tot); } } 

У меня есть большой код, но хорошо работает …

  class strDemo { public static void main(String args[]) { String s1=new String("The Ghost of The Arabean Sea"); String s2=new String ("The"); String s6=new String ("ehT"); StringBuffer s3; StringBuffer s4=new StringBuffer(s1); StringBuffer s5=new StringBuffer(s2); char c1[]=new char[30]; char c2[]=new char[5]; char c3[]=new char[5]; s1.getChars(0,28,c1,0); s2.getChars(0,3,c2,0); s6.getChars(0,3,c3,0); s3=s4.reverse(); int pf=0,pl=0; char c5[]=new char[30]; s3.getChars(0,28,c5,0); for(int i=0;i<(s1.length()-s2.length());i++) { int j=0; if(pf<=1) { while (c1[i+j]==c2[j] && j<=s2.length()) { j++; System.out.println(s2.length()+" "+j); if(j>=s2.length()) { System.out.println("first match of(The) :->"+i); } pf=pf+1; } } } for(int i=0;i<(s3.length()-s6.length()+1);i++) { int j=0; if(pl<=1) { while (c5[i+j]==c3[j] && j<=s6.length()) { j++; System.out.println(s6.length()+" "+j); if(j>=s6.length()) { System.out.println((s3.length()-i-3)); pl=pl+1; } } } } } } 
 //finding a particular word any where inthe string and printing its index and occurence class IndOc { public static void main(String[] args) { String s="this is hyderabad city and this is"; System.out.println("the given string is "); System.out.println("----------"+s); char ch[]=s.toCharArray(); System.out.println(" ----word is found at "); int j=0,noc=0; for(int i=0;i 

Если вы собираетесь сканировать «n» совпадений строки поиска, я бы рекомендовал использовать регулярные выражения . У них крутая кривая обучения, но они сэкономит вам часы, когда дело доходит до сложных поисков.

для множественного вхождения и символа, найденного в строке? да или нет

 import java.io.BufferedReader; import java.io.InputStreamReader; public class SubStringtest { public static void main(String[] args)throws Exception { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("enter the string"); String str=br.readLine(); System.out.println("enter the character which you want"); CharSequence ch=br.readLine(); boolean bool=str.contains(ch); System.out.println("the character found is " +bool); int position=str.indexOf(ch.toString()); while(position>=0){ System.out.println("the index no of character is " +position); position=str.indexOf(ch.toString(),position+1); } } } в import java.io.BufferedReader; import java.io.InputStreamReader; public class SubStringtest { public static void main(String[] args)throws Exception { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("enter the string"); String str=br.readLine(); System.out.println("enter the character which you want"); CharSequence ch=br.readLine(); boolean bool=str.contains(ch); System.out.println("the character found is " +bool); int position=str.indexOf(ch.toString()); while(position>=0){ System.out.println("the index no of character is " +position); position=str.indexOf(ch.toString(),position+1); } } } 
  String match = "hello"; String text = "0123456789hello0123456789hello"; int j = 0; String indxOfmatch = ""; for (int i = -1; i < text.length()+1; i++) { j = text.indexOf("hello", i); if (i>=j && j > -1) { indxOfmatch += text.indexOf("hello", i)+" "; } } System.out.println(indxOfmatch); 
  • p: commandbutton action не работает внутри p: dialog
  • Форматировать строки в методе Console.WriteLine
  • Игнорирование акцентированных букв в сравнении строк
  • Метод split () в Java не работает с точкой (.)
  • Как отрегулировать ведущее / завершающее пробелы стандартным образом?
  • Как объявить и использовать логические переменные в сценарии оболочки?
  • Как разобрать строку с десятичной точкой в ​​double?
  • Является ли строка Java действительно неизменной?
  • Удалить пробел из строки в Objective-C
  • Как преобразовать String в ArrayList?
  • как преобразовать строку в дату в mysql?
  • Давайте будем гением компьютера.