it-swarm.com.de

Wie kann ich überprüfen, ob ein einzelnes Zeichen in einer Zeichenfolge enthalten ist?

In Java gibt es eine Möglichkeit, die Bedingung zu überprüfen:

"Erscheint dieses einzelne Zeichen überhaupt in der Zeichenfolge x?"

ohne mit einer Schleife?

181
barfoon

Sie können string.indexOf('a') verwenden.

Wenn der 'a' in string vorhanden ist, gibt er den Index zurück (> = 0). Wenn nicht, wird -1 zurückgegeben. Ein nicht negativer Rückgabewert bedeutet also 'a' is present in the string.

248
mP.
  • String.contains() prüft, ob die Zeichenfolge eine bestimmte Folge von Zeichenwerten enthält
  • String.indexOf() Gibt den Index innerhalb der Zeichenfolge des ersten Auftretens des angegebenen Zeichens oder der angegebenen Teilzeichenfolge zurück (es gibt 4 Variationen davon) Methode)
134
Zach Scrivena

Ich bin nicht sicher, was das ursprüngliche Plakat genau fragt. Da indexOf (...) und (...) beide enthalten wahrscheinlich intern Schleifen verwenden, versucht er vielleicht zu prüfen, ob dies überhaupt ohne Schleife möglich ist? Ich kann mir zwei Möglichkeiten vorstellen, eine wäre natürlich eine Wiederholung:

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

Der andere ist weit weniger elegant, aber Vollständigkeit ...:

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

Die Anzahl der Zeilen wächst, wenn Sie natürlich immer längere Zeichenfolgen unterstützen müssen. Aber es gibt überhaupt keine Schleifen/Wiederholungen. Sie können die Längenprüfung sogar entfernen, wenn Sie befürchten, dass diese Länge () eine Schleife verwendet.

30
Jack Leow
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");
}
12
Richard

Wenn Sie dieselbe Zeichenfolge häufig überprüfen müssen, können Sie die Zeichenvorkommen im Voraus berechnen. Dies ist eine Implementierung, die ein Bit-Array verwendet, das in einem langen Array enthalten ist:

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
fillumina

Um zu überprüfen, ob in einer Zeichenfolge etwas nicht vorhanden ist, müssen Sie sich mindestens jedes Zeichen in einer Zeichenfolge ansehen. Selbst wenn Sie eine Schleife nicht explizit verwenden, hat sie dieselbe Effizienz. Davon abgesehen können Sie versuchen, str.contains ("" + char) zu verwenden.

4
mweiss

Sie können 2 Methoden aus der Klasse String verwenden.

  • String.contains() prüft, ob die Zeichenfolge eine bestimmte Folge von Zeichenwerten enthält
  • String.indexOf() , das den Index innerhalb der Zeichenfolge des ersten Auftretens des angegebenen Zeichens oder der angegebenen Teilzeichenfolge zurückgibt oder -1 zurückgibt, wenn das Zeichen wird nicht gefunden (es gibt 4 Variationen dieser Methode)

Methode 1:

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

Methode 2:

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

Links von: Zach Scrivena

3
Halfacht

Ja, mithilfe der indexOf () -Methode für die Zeichenfolgenklasse. Siehe API-Dokumentation für diese Methode

2
Mystic
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);
    }
}
1
Praveen kumar

Ist das unten was Sie gesucht haben?

int index = string.indexOf(character);
return index != -1 && string.lastIndexOf(character) != index;
0
Toochka
String s="praveen";
boolean p=s.contains("s");
if(p)
    System.out.println("string contains the char 's'");
else
    System.out.println("string does not contains the char 's'");

Ausgabe

string does not contains the char 's'
0
praveen
static String removeOccurences(String a, String b)
{
    StringBuilder s2 = new StringBuilder(a);

    for(int i=0;i<b.length();i++){
        char ch = b.charAt(i);  
        System.out.println(ch+"  first index"+a.indexOf(ch));

        int lastind = a.lastIndexOf(ch);

    for(int k=new String(s2).indexOf(ch);k > 0;k=new String(s2).indexOf(ch)){
            if(s2.charAt(k) == ch){
                s2.deleteCharAt(k);
        System.out.println("val of s2 :             "+s2.toString());
            }
        }
      }

    System.out.println(s1.toString());

    return (s1.toString());
}
0
Ganeshmani

Sie können nicht überprüfen, ob char in einer Zeichenfolge überhaupt vorkommt, ohne die Zeichenfolge mindestens einmal mit loop/recursion zu durchlaufen (die integrierten Methoden wie indexOf verwenden auch eine Schleife).

Wenn die Nr. Wenn sich ein Zeichen in einem String befindet , wird häufig nachgeschlagen. x ist mehr als die Länge des Strings, als ich mit einer Set -Datenstruktur empfehlen würde da dies effizienter wäre als die Verwendung von indexOf

String s = "abc";

// Build a set so we can check if character exists in constant time O(1)
Set<Character> set = new HashSet<>();
int len = s.length();
for(int i = 0; i < len; i++) set.add(s.charAt(i));

// Now we can check without the need of a loop
// contains method of set doesn't use a loop unlike string's contains method
set.contains('a') // true
set.contains('z') // false

Mit set können Sie überprüfen, ob ein Zeichen in einer Zeichenfolge in konstanter Zeit O(1) vorhanden ist, aber Sie werden auch verwenden zusätzlicher Speicher (Die Komplexität des Speicherplatzes ist O(n)).

0
Dhyey
you can use this code. It will check the char is present or not. If it is present then the return value is >= 0 otherwise it's -1. Here I am printing alphabets that is not present in the input.

import Java.util.Scanner;

public class Test {

public static void letters()
{
    System.out.println("Enter input char");
    Scanner sc = new Scanner(System.in);
    String input = sc.next();
    System.out.println("Output : ");
    for (char alphabet = 'A'; alphabet <= 'Z'; alphabet++) {
            if(input.toUpperCase().indexOf(alphabet) < 0) 
                System.out.print(alphabet + " ");
    }
}
public static void main(String[] args) {
    letters();
}

}

//Ouput Example
Enter input char
nandu
Output : 
B C E F G H I J K L M O P Q R S T V W X Y Z
0
Nandu cg