Javaの文字列比較
-
27-09-2019 - |
質問
「2つのひもを辞書的に比較する」とはどういう意味ですか?
解決
@bozhoと@aioobeからの回答から導くため、辞書の比較は、辞書で見つかる可能性のある注文に似ています。
Java文字列クラスは、を提供します .compareTo ()
文字列を辞書的に比較する方法。このように使用されます "apple".compareTo ("banana")
.
この方法の返品は次のとおりです int
次のように解釈できます。
- <0を返し、メソッドを呼び出す文字列は辞書編成的に最初に(辞書で最初に来ます)
- returns == 0 2つの文字列は辞書的に同等です
- > 0を返し、次にパラメーターがに渡されます
compareTo
方法は最初に辞書編成的にです。
より具体的には、この方法はASCII値に最初のゼロの違いを提供します。
したがって "computer".compareTo ("comparison")
の値を返します (int) 'u' - (int) 'a'
(20)。これは肯定的な結果であるため、パラメーター("comparison"
)最初に辞書編成的に。
バリアントもあります .compareToIgnoreCase ()
戻ります 0
にとって "a".compareToIgnoreCase ("A");
例えば。
他のヒント
文言「比較」はやや誤解を招くものです。あなたは厳格な平等を比較しているのではなく、その文字列が辞書(Lexicon)で最初に来るかを比較しています。
これは、文字列のコレクションをソート可能にする機能です。
これはそうです 非常に アクティブロケールに依存します。たとえば、ここデンマークにはキャラクター「Å」があります 使用済み 「aa」として綴られ、2つのシングルAとは非常に異なる(編集:if asと発音します 「Å」!)。したがって、デンマークの並べ替えルールは、2つのconsequtive aを「Å」と同じように扱います。これは、zを追いかけることを意味します。これはまた、デンマークの辞書が英語やスウェーデンの辞書とは異なる方法でソートされていることを意味します。
String.compareTo(..)
メソッドは辞書編集の比較を実行します。語彙的に==アルフェベット語。
互いに同じ位置を持つ文字を順番に比較する..辞書で単語を注文する方法のようなもの
レキシコンで最初に登場する文字列を確認すると、文字列の辞書的な比較を行いました!
いくつかのリンク:
後者のリンクから盗まれました:
文字列sは、辞書編集の順序で文字列tの前に
- s のプレフィックスです t, 、 また
- もしも c と d それぞれの最初のキャラクターです s と t その中で s と t 違います c 先行します d 文字の順序で。
注:アルファベット文字の文字の場合、文字順はアルファベット順の順序と一致します。数字は文字の前にあり、大文字は小文字に先行します。
例:
- 家は家に先行します
- 家は家に先行します
- 作曲家はコンピューターに先行します
- H2Oはホテルに先行します
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
ベンジャミン
ヘイリー
ジェイキー
カンビズ
サマンサ
K1AMBIZ
カンビズ
これは回答であることに注意してください。
小文字の文字を含む名前をフィルタリングしていることに注意してください。
アルゴの下「辞書編成的に2つの弦を比較する」
2つの文字列文字列1と文字列2を入力します。
for(int i = 0; i <str1.length()&& i <str2.length(); i ++)
(ストリングの1つが終了するまでそれらを比較する両方の文字列の各文字をループします):
a。両方の文字の単コード値が同じ場合、続行します。
b。文字列1の文字のユニコード値と文字列2のUnicode値が異なる場合、return(str1 [i] -str2 [i])
文字列1の長さがstring2未満の場合
return str2 [str1.length()
そうしないと
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を返します。
ソース : - ソース