258

Javaでは、状態を確認する方法があります:

「この単一の文字は、文字列 x に表示されますか」

ループを使わずに?

4

15 に答える 15

328

使用できますstring.indexOf('a')

charaが に存在する場合string:

このオブジェクトによって表される文字シーケンスで最初に出現する文字のインデックスを返します。文字が出現しない場合は -1 を返します。

于 2009-02-03T05:40:35.853 に答える
156
  • String.contains()文字列に指定された一連の char 値が含まれているかどうかをチェックします
  • String.indexOf()指定された文字または部分文字列が最初に出現した文字列内のインデックスを返します (このメソッドには 4 つのバリエーションがあります)。
于 2009-02-03T05:41:41.513 に答える
36

元のポスターが正確に何を求めているのかわかりません。indexOf(...) と contains(...) はどちらもおそらく内部でループを使用しているため、ループなしでこれが可能かどうかを確認しようとしているのではないでしょうか? 2 つの方法が考えられますが、1 つはもちろん再帰です。

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

もう1つははるかにエレガントではありませんが、完全性は...:

/**
 * 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() がループを使用していることが懸念される場合は、長さチェックを削除することもできます。

于 2009-02-03T13:53:56.310 に答える
12
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");
}
于 2011-07-11T07:00:51.840 に答える
5

同じ文字列を頻繁にチェックする必要がある場合は、文字の出現を事前に計算できます。これは、長い配列に含まれるビット配列を使用する実装です。

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;
}}
于 2012-05-07T11:16:01.167 に答える
4

文字列に何かが存在しないかどうかを確認するには、少なくとも文字列の各文字を調べる必要があります。したがって、ループを明示的に使用しなくても、同じ効率になります。そうは言っても、str.contains(""+char) を使用してみることができます。

于 2009-02-03T05:41:44.400 に答える
2

はい、文字列クラスで indexOf() メソッドを使用します。このメソッドの API ドキュメントを参照してください

于 2009-02-03T05:44:38.357 に答える
1
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);
    }
}
于 2012-07-24T15:54:30.780 に答える
0
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());
}
于 2012-05-22T05:21:00.020 に答える