web-dev-qa-db-ja.com

Javaの文字列比較

「辞書式に2つの文字列を比較する」とはどういう意味ですか?

73
Harshana

@Bozhoと@aioobeからの回答に基づいて、辞書編集の比較は、辞書で見つかる順序と似ています。

Java St​​ringクラスは、文字列を辞書式に比較するために.compareTo ()メソッドを提供します。この"Apple".compareTo ("banana")のように使用されます。

このメソッドの戻り値はintであり、次のように解釈できます。

  • <0を返す場合、メソッドを呼び出す文字列が辞書的に最初になります(辞書で最初に表示されます)
  • == 0を返す場合、2つの文字列は辞書的に同等です
  • > 0を返す場合、compareToメソッドに渡されるパラメーターが辞書順で最初になります。

より具体的には、このメソッドは、ASCII値の最初のゼロ以外の差を提供します。

したがって、"computer".compareTo ("comparison")(int) 'u' - (int) 'a'(20)の値を返します。これは肯定的な結果であるため、パラメーター("comparison")は辞書順で最初です。

たとえば、.compareToIgnoreCase ()に対して0を返すバリアント"a".compareToIgnoreCase ("A");もあります。

152
Philip

「比較」という言葉は、やや誤解を招く恐れがあります。厳密な等価性を比較するのではなく、辞書の最初に文字列が来るかどうかを調べます(辞書)。

これは、文字列のコレクションをソート可能にする機能です。

これはveryがアクティブなロケールに依存することに注意してください。たとえば、ここデンマークでは、「å」という文字があります。これは、「sed」と「aa」と綴られ、2つのシングルのa's(EDIT:If pronounced as 「å」!)。したがって、デンマークのソート規則は、2つの結果のaを「å」と同じように扱います。つまり、zの後に続きます。これは、デンマーク語の辞書が英語やスウェーデン語の辞書とは異なる方法でソートされることも意味します。

String.compareTo(..) メソッドは辞書編集比較を実行します。辞書順==アルファベット順。

8
Bozho

互いに同じ位置にある文字を順番に比較します..辞書で単語を並べる方法に似ています

8
Ramp

辞書内でどの文字列が最初に来るかを確認すると、文字列の辞書式比較が完了しました!

いくつかのリンク:

後者のリンクから盗まれた:

文字列sは、辞書式順序で文字列tに先行します。

  • stの接頭辞、または
  • ifcおよびdは、それぞれsおよびtここで、stが異なる場合、 cは、文字順でdの前にあります。

注:アルファベットの文字の場合、文字の順序はアルファベットの順序と一致します。数字は文字に先行し、大文字は小文字に先行します。

例:

  • 家は世帯に先行する
  • 世帯が家に先行する
  • 作曲家はコンピューターに先行する
  • H2OがHOTELに先行する
6
aioobe

Javaの辞書順:

  1. 数字-before-
  2. 大文字-before-
  3. 小文字

奇妙なことに、それは本当です...
デフォルトの動作を変更するには、コンパレータチェーンを作成する必要がありました。
次のスニペットを使って、入力文字列のより良い例を試して、順序を確認します(JSE 8が必要です)。

import Java.util.ArrayList;

public class HelloLambda {

public static void main(String[] args) {
    ArrayList<String> names = new ArrayList<>();
    names.add("Kambiz");
    names.add("kambiz");
    names.add("k1ambiz");
    names.add("1Bmbiza");
    names.add("Samantha");
    names.add("Jakey");
    names.add("Lesley");
    names.add("Hayley");
    names.add("Benjamin");
    names.add("Anthony");

    names.stream().
        filter(e -> e.contains("a")).
        sorted().
        forEach(System.out::println);
}
}

結果

1Bmbiza
ベンジャミン
ヘイリー
ジャキー
Kambiz
サマンサ
k1ambiz
kambiz

これはロケール固有の回答であることに注意してください。
小文字aを含む名前をフィルタリングしていることに注意してください。

2
Beezer

アルゴの下で「2つの文字列を辞書式に比較」

  1. 2つの文字列string 1とstring 2を入力します。

  2. for(int i = 0; i <str1.length()&& i <str2.length(); i ++)

    (両方の文字列の各文字を比較して、文字列の一方が終了するまでそれらを比較します):

    a。両方の文字のUnicode値が同じ場合、続行します。

    b。文字列1の文字のUnicode値と文字列2のUnicode値が異なる場合、(str1 [i] -str2 [i])を返します

  3. 文字列1の長さがstring2より小さい場合

    return str2 [str1.length()]

    else

    return str1 [str2.length()]

    //このメソッドは、2つの文字列を辞書式に比較します

    public static int compareCustom(String s1, String s2) {
        for (int i = 0; i < s1.length() && i< s2.length(); i++) {
            if(s1.charAt(i) == s2.charAt(i)){
                //System.out.println("Equal");
                continue;
            }
            else{
                return s1.charAt(i) - s2.charAt(i);
            }   
        }
        if(s1.length()<s2.length()){
            return s2.length() - s1.length();
        }
        else if(s1.length()>s2.length()){
            return s1.length()-s2.length();
        }
        else{
            return 0;
        }
    }
    

2つの文字列が等しい場合は0を返し、そうでない場合は負または正の値を返します

ソース:- ソース

0
Ved Prakash