Как я могу проверить, появляется ли один символ в строке? - PullRequest
174 голосов
/ 03 февраля 2009

В Java есть способ проверить условие:

"Отображается ли этот единственный символ в строке x"

без с использованием цикла?

Ответы [ 15 ]

241 голосов
/ 03 февраля 2009

Вы можете использовать string.indexOf('a').

Если 'a' присутствует в string, возвращается индекс (> = 0). Если нет, возвращается -1. Таким образом, неотрицательное возвращаемое значение означает, что 'a' is present in the string.

134 голосов
/ 03 февраля 2009
  • String.contains(), который проверяет, содержит ли строка заданную последовательность значений символов
  • String.indexOf(), который возвращает индекс в строке первого вхождения указанного символа или подстроки (существует 4 варианта этого метода)
30 голосов
/ 03 февраля 2009

Я не уверен, о чем конкретно спрашивает оригинальный постер. Поскольку indexOf (...) и содержит (...) оба , вероятно, , используют циклы внутри, возможно, он ищет, возможно ли это вообще без цикла? Я могу думать о двух путях, одно из которых, конечно, будет повторением:

public boolean containsChar(String s, char search) {
    if (s.length() == 0)
        return false;
    else
        return s.charAt(0) == search || containsChar(s.substring(1), search);
}

Другой гораздо менее изящен, но полон ...:

/**
 * Works for strings of up to 5 characters
 */
public boolean containsChar(String s, char search) {
    if (s.length() > 5) throw IllegalArgumentException();

    try {
        if (s.charAt(0) == search) return true;
        if (s.charAt(1) == search) return true;
        if (s.charAt(2) == search) return true;
        if (s.charAt(3) == search) return true;
        if (s.charAt(4) == search) return true;
    } catch (IndexOutOfBoundsException e) {
        // this should never happen...
        return false;
    }
    return false;
}

Количество строк растет, поскольку вам необходимо поддерживать более длинные и длинные строки, конечно. Но нет никаких петель / повторений вообще. Вы даже можете удалить проверку длины, если вы обеспокоены тем, что эта функция length () использует цикл.

12 голосов
/ 11 июля 2011
String temp = "abcdefghi";
if(temp.indexOf("b")!=-1)
{
   System.out.println("there is 'b' in temp string");
}
else
{
   System.out.println("there is no 'b' in temp string");
}
4 голосов
/ 07 мая 2012

Если вам нужно часто проверять одну и ту же строку, вы можете заранее рассчитать количество символов. Это реализация, которая использует битовый массив, содержащийся в длинном массиве:

public class FastCharacterInStringChecker implements Serializable {
private static final long serialVersionUID = 1L;

private final long[] l = new long[1024]; // 65536 / 64 = 1024

public FastCharacterInStringChecker(final String string) {
    for (final char c: string.toCharArray()) {
        final int index = c >> 6;
        final int value = c - (index << 6);
        l[index] |= 1L << value;
    }
}

public boolean contains(final char c) {
    final int index = c >> 6; // c / 64
    final int value = c - (index << 6); // c - (index * 64)
    return (l[index] & (1L << value)) != 0;
}}
4 голосов
/ 03 февраля 2009

Чтобы проверить, не существует ли чего-либо в строке, по крайней мере, вам нужно посмотреть на каждый символ в строке. Таким образом, даже если вы не используете цикл явно, он будет иметь такую ​​же эффективность. При этом вы можете попробовать использовать str.contains ("" + char).

2 голосов
/ 27 марта 2018

Вы можете использовать 2 метода из класса String.

  • String.contains(), который проверяет, содержит ли строка заданную последовательность значений символов
  • String.indexOf(), который возвращает индекс в строке первого вхождения указанного символа или подстроки или возвращает -1, если символ не найден (имеется 4 варианта этого метода)

Метод 1:

String myString = "foobar";
if (myString.contains("x") {
    // Do something.
}

Метод 2:

String myString = "foobar";
if (myString.indexOf("x") >= 0 {
    // Do something.
}

Ссылки по: Зак Скривена

2 голосов
/ 03 февраля 2009

Да, используя метод indexOf () для строкового класса. См. Документацию API для этого метода

1 голос
/ 24 июля 2012
package com;
public class _index {

    public static void main(String[] args) {
        String s1="be proud to be an indian";
        char ch=s1.charAt(s1.indexOf('e'));
        int count = 0; 
        for(int i=0;i<s1.length();i++) {
            if(s1.charAt(i)=='e'){
                System.out.println("number of E:=="+ch);
                count++;
            }
        }
        System.out.println("Total count of E:=="+count);
    }
}
0 голосов
/ 28 марта 2018

Я использовал для этого метод string.include (), который возвращает true или false, если найдена строка или символ. См. Ниже документацию.

https://www.w3schools.com/jsref/jsref_includes.asp

...