[java] 문자열에 단일 문자가 나타나는지 어떻게 확인할 수 있습니까?

Java에는 조건을 확인하는 방법이 있습니다.

“이 단일 문자가 문자열 x에 전혀 표시됩니까?”

루프 사용 하지 않고 ?



답변

사용할 수 있습니다 string.indexOf('a').

문자 a가 다음에있는 경우 string:

이 객체가 나타내는 문자 순서에서 문자가 처음 나타나는 색인을 반환하거나 문자가 발생하지 않으면 -1을 반환합니다.


답변

  • String.contains() 문자열에 지정된 문자 값 시퀀스가 ​​포함되어 있는지 확인합니다.
  • String.indexOf() 지정된 문자 또는 하위 문자열이 처음 나타나는 문자열 내에서 색인을 반환합니다 (이 방법에는 4 가지 변형이 있음)

답변

원래 포스터가 정확히 무엇을 요구하는지 잘 모르겠습니다. indexOf (…) 및 contains (…) 둘 다 내부에서 루프를 사용하기 때문에 아마도 루프없이 이것이 가능한지 여부를 찾고 있습니까? 나는 두 가지 방법을 생각할 수있다. 물론 하나는 재발이다.

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 ()가 루프를 사용하는 것이 걱정된다면 길이 검사를 제거 할 수도 있습니다.


답변

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");
}


답변

String클래스 에서 2 개의 메소드를 사용할 수 있습니다 .

  • 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.
}

링크 : Zach Scrivena


답변

문자열에없는 것이 있는지 확인하려면 최소한 문자열의 각 문자를 확인해야합니다. 따라서 루프를 명시 적으로 사용하지 않더라도 동일한 효율성을 갖습니다. 즉, str.contains ( “”+ char)를 사용해 볼 수 있습니다.


답변

동일한 문자열을 자주 확인해야하는 경우 사전에 문자 발생을 계산할 수 있습니다. 이것은 긴 배열에 포함 된 비트 배열을 사용하는 구현입니다.

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;
}}