Как найти n-е вхождение символа в строку? - PullRequest
86 голосов
/ 20 октября 2010

Похоже на опубликованный вопрос здесь , ищу для решения на Java.

То есть, как найти индекс n-го вхождения символа / строки из строки?

Пример:" / folder1 / folder2 / folder3 / ". В этом случае, если я спрашиваю о 3-м появлении косой черты (/), он появляется перед папкой 3, и я ожидаю вернуть эту позицию индекса. Мое истинное намерение состоит в том, чтобы вычеркнуть его из n-го вхождения символа.

Есть ли какой-либо удобный / готовый к использованию метод, доступный в Java API, или нам нужно написать небольшую логику самостоятельно, чтобы решить эту проблему?

Также

  1. Я быстро искал, поддерживается ли какой-либо метод для этой цели в Apache Commons Lang's StringUtils , но я не нашел ни одного.
  2. Могут ли регулярные выражения помочь в этом отношении?

Ответы [ 16 ]

1 голос
/ 12 января 2018

Может быть, вы могли бы добиться этого и с помощью метода String.split (..).

String str = "";
String[] tokens = str.split("/")
return tokens[nthIndex] == null 
1 голос
/ 09 сентября 2014
public class Sam_Stringnth {

    public static void main(String[] args) {
        String str="abcabcabc";
        int n = nthsearch(str, 'c', 3);
        if(n<=0)
            System.out.println("Character not found");
        else
            System.out.println("Position is:"+n);
    }
    public static int nthsearch(String str, char ch, int n){
        int pos=0;
        if(n!=0){
            for(int i=1; i<=n;i++){
                pos = str.indexOf(ch, pos)+1;
            }
            return pos;
        }
        else{
            return 0;
        }
    }
}
0 голосов
/ 29 марта 2019
public static int findNthOccurrence(String phrase, String str, int n)
{
    int val = 0, loc = -1;
    for(int i = 0; i <= phrase.length()-str.length() && val < n; i++)
    {
        if(str.equals(phrase.substring(i,i+str.length())))
        {
            val++;
            loc = i;
        }
    }

    if(val == n)
        return loc;
    else
        return -1;
}
0 голосов
/ 28 января 2016

Код возвращает n-ю позицию вхождения позиции, также известную как ширина поля.Пример.если строка "Переполнение стека в низком melow" - это строка для поиска 2nd вхождение токена "low", вы согласитесь со мной, что это второе вхождение в подстроке "18 и 21 ".indexOfOccurance («Переполнение стека при низком значении», low, 2) возвращает 18 и 21 в строке.

class Example{
    public Example(){
    }
            public String indexOfOccurance(String string, String token, int nthOccurance) {
                    int lengthOfToken = token.length();
                    int nthCount = 0;
                    for (int shift = 0,count = 0; count < string.length() - token.length() + 2; count++, shift++, lengthOfToken++)
                        if (string.substring(shift, lengthOfToken).equalsIgnoreCase(token)) { 
                    // keeps count of nthOccurance
                            nthCount++; 
                        if (nthCount == nthOccurance){
                    //checks if nthCount  == nthOccurance. If true, then breaks 
                             return String.valueOf(shift)+ " " +String.valueOf(lengthOfToken);   
                        }  
                    }
                    return "-1";
                }
    public static void main(String args[]){
    Example example = new Example();
    String string = "the man, the woman and the child";
    int nthPositionOfThe = 3;
   System.out.println("3rd Occurance of the is at " + example.indexOfOccurance(string, "the", nthPositionOfThe));
    }
    }
0 голосов
/ 16 сентября 2015

Мое решение:

/**
 * Like String.indexOf, but find the n:th occurance of c
 * @param s string to search
 * @param c character to search for
 * @param n n:th character to seach for, starting with 1
 * @return the position (0-based) of the found char, or -1 if failed
 */

public static int nthIndexOf(String s, char c, int n) {
    int i = -1;
    while (n-- > 0) {
        i = s.indexOf(c, i + 1);
        if (i == -1)
            break;
    }
    return i;
}
0 голосов
/ 20 марта 2013
/* program to find nth occurence of a character */

import java.util.Scanner;

public class CharOccur1
{

    public static void main(String arg[])
    {
        Scanner scr=new Scanner(System.in);
        int position=-1,count=0;
        System.out.println("enter the string");
        String str=scr.nextLine();
        System.out.println("enter the nth occurence of the character");
        int n=Integer.parseInt(scr.next());
        int leng=str.length();
        char c[]=new char[leng];
        System.out.println("Enter the character to find");
        char key=scr.next().charAt(0);
        c=str.toCharArray();
        for(int i=0;i<c.length;i++)
        {
            if(c[i]==key)
            {
                count++;
                position=i;
                if(count==n)
                {
                    System.out.println("Character found");
                    System.out.println("the position at which the " + count + " ocurrence occurs is " + position);
                    return;
                }
            }
        }
        if(n>count)
        { 
            System.out.println("Character occurs  "+ count + " times");
            return;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...