質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
NetBeans

NetBeansは Java、HTML5、PHP、C/C++のアプリケーションのフレームワーク、もしくは統合開発環境(NetBeans IDE)の両方を指します

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

1回答

2143閲覧

Stringがequals比較できない

SMV

総合スコア12

NetBeans

NetBeansは Java、HTML5、PHP、C/C++のアプリケーションのフレームワーク、もしくは統合開発環境(NetBeans IDE)の両方を指します

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

1クリップ

投稿2020/06/30 07:47

equalsでStringの値を比較する際、
同じコードでも英字では問題なく処理できるのですが
比較の値を日本語にするとうまく動作しません。

調べたところ認識が場所によって「が」と「か」+「゛」のように見かけ上同じでも文字コードが変わってしまう場合がある(http://www.javainthebox.net/laboratory/JavaSE6/normalizer/normalizer.html)
というような情報を得たのでUnicode正規化(java.text.Normalizer)も試してみましたが思うような動作にはならない(正解を入力してもfalseの処理をする)状況です。

false処理はできてしまうのでエラーは表示されていません。
ただ理想とは違う挙動なので日本語で正解を入力したらtrue処理されるようにしたいです。
(英語なら今でもtrueで処理されますが日本語で処理したいと考えています)

java

1package vegetest; 2import java.util.Scanner; 3import java.text.Normalizer; 4 5public class KNMain { 6 public static void main(String[] args) { 7 // TODO code application logic here 8 String first = "初期値"; 9 String check = "ベジータ"; 10 String normCheck = Normalizer.normalize(check, Normalizer.Form.NFC); 11 System.out.println(first); 12 System.out.println("入力まち"); 13 14 Scanner scan = new Scanner(System.in); 15 String inputWord = scan.nextLine(); 16 String normInputWord = Normalizer.normalize(inputWord, Normalizer.Form.NFC); 17 18 if (normInputWord.equals(normCheck)) { 19 first = "変更済"; 20 String second = "ベジータ"; 21 System.out.println(first); 22 System.out.println(second); 23 }else{ 24 System.out.println(first); 25 } 26 System.out.println(first); 27 System.out.println(second); 28} 29}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/06/30 08:24

OS環境は何でしょうか?
退会済みユーザー

退会済みユーザー

2020/06/30 08:30

両方同じことをしてるなら結果は変わりませんよ。 ベジータ べジータ 上記のような間違いでは?
退会済みユーザー

退会済みユーザー

2020/06/30 08:30

※ ひらがなの「べ」とカタカナの「ベ」ね
退会済みユーザー

退会済みユーザー

2020/06/30 08:33

まあ toCharArray を Arrays.toString して確認しよう
guest

回答1

0

Javaファイルの文字コードを確認してみてください。
JavaファイルをUTF8で書いていた場合、Windows環境で動作させるとSJISとして判定するため、同じ文字列でも比較できない場合があります。

jvmを起動する際に「java -Dfile.encoding=エンコーディング名」のように文字コードをすれば改善する可能性もあります。

投稿2020/07/02 03:57

perorin0418

総合スコア90

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問