• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaでの文字判定)

javaでの文字判定方法とは

このQ&Aのポイント
  • javaでの文字判定方法について詳しく教えてください。
  • 特に16進数文字の判定方法について教えてください。
  • Stringやbyte配列、char配列などの場合での判定方法の違いも知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

【正規表現】 正規表現を使う https://java-reference.com/java_string_regex.html 「find()」と「matches()」では挙動が違うので注意して下さい。 同一のPatternで多数のデータをチェックしたい場合は、「Pattern.compile(~)」をループの外に出した方が当然スーピードが早い。 下記は「Pattern.compile(~)」をループの外に出している例。 import java.util.regex.Pattern; public class test { public static void main(String[] args) { String reg = "[0-9a-fA-F]+"; String data[] = { "","789abc", "789ABC", "789ABCghi" }; Pattern p = Pattern.compile(reg); for(int i = 0; i<data.length; i++ ){ System.out.println( "i=" + i + "; " + "data[i]=\"" + data[i] + "\"; " + "p.matcher(data[i]).matches( )=" + p.matcher(data[i]).matches( ) + "; " + ""); } } } 実行結果 i=0; data[i]=""; p.matcher(data[i]).matches( )=false; i=1; data[i]="789abc"; p.matcher(data[i]).matches( )=true; i=2; data[i]="789ABC"; p.matcher(data[i]).matches( )=true; i=3; data[i]="789ABCghi"; p.matcher(data[i]).matches( )=false;

miiom1018
質問者

お礼

ご親切にサンプルまで示していただいたのでamanojaku1へ ベストアンサーを差し上げます。

すると、全ての回答が全文表示されます。

その他の回答 (13)

回答No.14

処理スピードの速い順。 (1).正規表現。 (2).「.toCharArray()」で一括変換し配列で処理。 (3).一文字 一文字「.charAt(~)」で変換 「(1)、(3)」は既に投稿してあります。 下記は「(2)」です。 public class test { public static void main(String[] args) { String data[] = { "","789abc", "789ABC", "789ABCghi" }; for(int i = 0; i<data.length; i++ ){ System.out.println( "i=" + i + "; " + "data[i]=\"" + data[i] + "\"; " + "CheckHex(data[i])=" + CheckHex(data[i]) + "; " + ""); } } static boolean CheckHex(String check){ boolean hex = false; // true char[] ca = check.toCharArray(); for(int i = 0; i<ca.length; i++ ){ char c = ca[i]; if( '0'<=c & c<='9' | 'a'<=c & c<='f' | 'A'<=c & c<='F' ){ hex = true; // false }else{ hex = false; // true break; } } return hex; } }

すると、全ての回答が全文表示されます。
回答No.13

> // 実は「Shift JIS」と「Windows-31j」はビミョウに違うので、ビミョウに違った変換になってしまうので要注意。 > > // Windowsファイル用データを「Java String」(UTF16)データに変換。 > JavaUTF16 = new String(WinFileByte, Charset.forName("Windows-31j")); > > // 「Java String」(UTF16)データをWindowsファイル用データに変換。 > WinFileByte = JavaUTF16.getBytes(Charset.forName("Windows-31j")); Windowsファイル用データを使う場合には下記のように「Shift_JIS」を使ってはならない。 String JavaUTF16 = new String(WinFileByte, Charset.forName("Shift_JIS")); WinFileByte = JavaUTF16.getBytes(Charset.forName("Shift_JIS"));

すると、全ての回答が全文表示されます。
回答No.12

>byte[]の場合、char[]の場合それぞれ教えてもらえると助かります。 基本的に変換すれば良いですが、byte型は少々 面倒です。 byte型が使われる場合は、主にファイルの入出力です、例えばWindowsが出力した「Shift JIS」ファイルを読み込みたいとか、Windows用に「Shift JIS」ファイルを書き出したいとか言う場合でしょう。 Javaは内部的に文字エンコーディングとしてUTF-16のようです。 import java.nio.charset.Charset; byte WinFileByte[] = null; String JavaUTF16 = null; // ここでWinFileByte[] にWindowsファイルを読み込んだとする。 // 実は「Shift JIS」と「Windows-31j」はビミョウに違うので、ビミョウに違った変換になってしまうので要注意。 // Windowsファイル用データを「Java String」(UTF16)データに変換。 JavaUTF16 = new String(WinFileByte, Charset.forName("Windows-31j")); // 「Java String」(UTF16)データをWindowsファイル用データに変換。 WinFileByte = JavaUTF16.getBytes(Charset.forName("Windows-31j")); 参考 ‘愛’で学ぶ文字コードと文字化けの常識 http://www.atmarkit.co.jp/ait/articles/0706/21/news129.html http://www.atmarkit.co.jp/ait/articles/0706/21/news129_2.html

すると、全ての回答が全文表示されます。
回答No.11

>String型では「==」はアドレス(ポインター)の判定になります。 String型で「==」はポインターが「null」か どうかを判定する時に使います。

すると、全ての回答が全文表示されます。
回答No.10

>>>String型で文字判定をする場合「<、>、==、、<=、>=」は使えません、、String型で文字判定をする場合、「.equals(~)」しか使えません(初心者がハマリやすいところです)。 >>特に「==」はエラーにならないので要注意です。 >「==」はエラーにならないので、一見 使えてるように思えてしまいますが、正常に文字列を判定できません。 String型では「==」はアドレス(ポインター)の判定になります。 同じ文字列は同じアドレス(ポインター)としている処理系なら「==」で正常に文字列を判定できるでしょうが(そんな事は期待しては いけません)。

すると、全ての回答が全文表示されます。
回答No.9

>>String型で文字判定をする場合「<、>、==、、<=、>=」は使えません、、String型で文字判定をする場合、「.equals(~)」しか使えません(初心者がハマリやすいところです)。 >特に「==」はエラーにならないので要注意です。 「==」はエラーにならないので、一見 使えてるように思えてしまいますが、正常に文字列を判定できません。

すると、全ての回答が全文表示されます。
回答No.8

>String型で文字判定をする場合「<、>、==、、<=、>=」は使えません、、String型で文字判定をする場合、「.equals(~)」しか使えません(初心者がハマリやすいところです)。 特に「==」はエラーにならないので要注意です。

すると、全ての回答が全文表示されます。
回答No.7

一文字 一文字 処理したい場合 >回答No.6 amanojaku1 String型で文字判定をする場合「<、>、==、、<=、>=」は使えません、、String型で文字判定をする場合、「.equals(~)」しか使えません(初心者がハマリやすいところです)。 「'~'」のようにシングル・クォーテーションで囲むとchar型になります(String型ではないので注意して下さい)。 あくまでも下記はjavaの勉強のためです、実際のプログラムには正規表現を お使い下さい。

すると、全ての回答が全文表示されます。
回答No.6

public class test { public static void main(String[] args) { String data[] = { "","789abc", "789ABC", "789ABCghi" }; for(int i = 0; i<data.length; i++ ){ System.out.println( "i=" + i + "; " + "data[i]=\"" + data[i] + "\"; " + "CheckHex(data[i])=" + CheckHex(data[i]) + "; " + ""); } } static boolean CheckHex(String check){ boolean hex = false; // true for(int i = 0; i<check.length(); i++ ){ char c = check.charAt(i); if( '0'<=c & c<='9' | 'a'<=c & c<='f' | 'A'<=c & c<='F' ){ hex = true; // false }else{ hex = false; // true break; } } return hex; } }

すると、全ての回答が全文表示されます。
回答No.5

一文字 一文字 処理したい場合 String型で文字判定をする場合、「.equals(~)」しか有りません、つまりString型では文字の大小と言う概念が排除されています。 (回答No.2 pringlezさんの仰るとおり)String型を「.charAt(~)」でchar型に変換して処理すれば良いでしょう(char型は16ビット(2バイト)の符号なし整数)。

すると、全ての回答が全文表示されます。

関連するQ&A