「辞書式に2つの文字列を比較する」とはどういう意味ですか?
@Bozhoと@aioobeからの回答に基づいて、辞書編集の比較は、辞書で見つかる順序と似ています。
Java Stringクラスは、文字列を辞書式に比較するために.compareTo ()
メソッドを提供します。この"Apple".compareTo ("banana")
のように使用されます。
このメソッドの戻り値はint
であり、次のように解釈できます。
compareTo
メソッドに渡されるパラメーターが辞書順で最初になります。より具体的には、このメソッドは、ASCII値の最初のゼロ以外の差を提供します。
したがって、"computer".compareTo ("comparison")
は(int) 'u' - (int) 'a'
(20)の値を返します。これは肯定的な結果であるため、パラメーター("comparison"
)は辞書順で最初です。
たとえば、.compareToIgnoreCase ()
に対して0
を返すバリアント"a".compareToIgnoreCase ("A");
もあります。
「比較」という言葉は、やや誤解を招く恐れがあります。厳密な等価性を比較するのではなく、辞書の最初に文字列が来るかどうかを調べます(辞書)。
これは、文字列のコレクションをソート可能にする機能です。
これはveryがアクティブなロケールに依存することに注意してください。たとえば、ここデンマークでは、「å」という文字があります。これは、「sed」と「aa」と綴られ、2つのシングルのa's(EDIT:If pronounced as 「å」!)。したがって、デンマークのソート規則は、2つの結果のaを「å」と同じように扱います。つまり、zの後に続きます。これは、デンマーク語の辞書が英語やスウェーデン語の辞書とは異なる方法でソートされることも意味します。
String.compareTo(..)
メソッドは辞書編集比較を実行します。辞書順==アルファベット順。
互いに同じ位置にある文字を順番に比較します..辞書で単語を並べる方法に似ています
辞書内でどの文字列が最初に来るかを確認すると、文字列の辞書式比較が完了しました!
いくつかのリンク:
後者のリンクから盗まれた:
文字列sは、辞書式順序で文字列tに先行します。
- sはtの接頭辞、または
- ifcおよびdは、それぞれsおよびtここで、sとtが異なる場合、 cは、文字順でdの前にあります。
注:アルファベットの文字の場合、文字の順序はアルファベットの順序と一致します。数字は文字に先行し、大文字は小文字に先行します。
例:
- 家は世帯に先行する
- 世帯が家に先行する
- 作曲家はコンピューターに先行する
- H2OがHOTELに先行する
Javaの辞書順:
奇妙なことに、それは本当です...
デフォルトの動作を変更するには、コンパレータチェーンを作成する必要がありました。
次のスニペットを使って、入力文字列のより良い例を試して、順序を確認します(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つの文字列を辞書式に比較」
2つの文字列string 1とstring 2を入力します。
for(int i = 0; i <str1.length()&& i <str2.length(); i ++)
(両方の文字列の各文字を比較して、文字列の一方が終了するまでそれらを比較します):
a。両方の文字のUnicode値が同じ場合、続行します。
b。文字列1の文字のUnicode値と文字列2のUnicode値が異なる場合、(str1 [i] -str2 [i])を返します
文字列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を返し、そうでない場合は負または正の値を返します
ソース:- ソース