• ベストアンサー
※ 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.4

>回答No.3 amanojaku1 Javaはインタープリタ型言語に分類されます。 JavaはJavaコンパイラでバイトコードと呼ばれる中間言語に変換されます。 そのバイトコードをJavaVM (Java Virtual Machine) でインタープリタ方式で実行されます。 そのために通常のシンタックスを解釈するインタープリタよりは効率良く処理できますが、本物のコンパイラよりは当然 遅いです。 何が言いたいかと言うと自分で処理を作るよりJava側に それを処理できるコマンドがあるなら その方が処理のスーピードが早いと言う事です。 この場合、一文字 一文字 処理するより、正規表現を使った方が当然 処理のスーピードが早いと言う事です。

全文を見る
すると、全ての回答が全文表示されます。
  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.2

普通は正規表現でやります。1行で書けますので。 ただ、質問文を見る感じではあなたは相当な初心者のようなので正規表現という言葉すら知らなさそうに感じます。 >isxdigit()を使ってループでisxdigit( xyz[i] )として >1文字づつ判定しNUL文字が出現すれば終了 と同じように書く方法もお伝えしておきます。 charAtで文字列のlengthまでforでループすれば同じように書けますよ。

miiom1018
質問者

お礼

>ただ、質問文を見る感じではあなたは相当な初心者のようなので正規表現と >いう言葉すら知らなさそうに感じます。 あ、わかります?分かる人がみると分かっちゃうものなのですね

全文を見る
すると、全ての回答が全文表示されます。
  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.1

正規表現を用いればよろしいかと。 boolean String#matches(String regex) byte[], char[]についてはStringに変換してしまえばいいので省略。

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

関連するQ&A

  • 2byte文字の判定

    お世話になります。 2バイト文字かどうかの判定のやり方ですが、 String a = "";//←判定したい1文字(とりあえずStringとします) byte[] b = a.getByte(); if((int)b[0]<0){ //2byte文字 }else{ //1byte文字 } という判定の方法はありですか? それとも根本的に考え方間違えてますでしょうか??

    • ベストアンサー
    • Java
  • javaというか文字列について少し質問です><

    javaというか文字列について少し質問です>< javaというか文字列について少し質問です>< お願いします。 シーザー暗号で文字列をずらすためのクラスのメソッドをつくったのですが・・・ String decrypt(String str,int key) { StringBuffer sb = new StringBuffer(); // もしくはStringBuilder for(int i=0;i<str.length();i++){ char c=str.charAt(i); c=(char)((int)c-key); sb.append( c ); } こんな感じなのですがアルファベットの小文字26文字のみとしたいので暗号化や復号化の際に越えてしまう場合はアルファベット内でループさせたいのですがいまいちやり方が浮かびません><越えてしまう場合はzからひいたものを表現させれば良いかと思いやってみたのですが全然違う文字が出てきてしまいました。何かいい方法を教えてください。お願いします><

    • ベストアンサー
    • Java
  • javaの文字コードについて

    いつもお世話になっております。 webで入れられた文字列に全角が含まれるか判定したいのですが、 文字コードについて質問させてください。 javaは標準では、String型は標準ではunicodeだと思うのですが、 これはutf-8なのでしょうか。utf-16なのでしょうか。 試しに以下のように"A"の文字をbyteに変換してみたところ、 String strTest = "A"; byte[] bbb = strTest.getBytes(); for(int i = 0 ; i < bbb.length ; i++){ System.out.println(bbb[i]); } "65"という結果が返ってきました。 http://ash.jp/code/unitbl1.htm 等文字コード表を見ると、"A"は"41"と定義されており、なぜ"65"が返ってくるのでしょうか。 変な質問ですいません。 関係無いと思いますが、ソースはS-JIS、windwos環境で実行しています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • String型の値が大文字か小文字か判定する

    いつもお世話になっています。 String型の値が、大文字か小文字か判定することはできないのでしょうか? char型だと Charactereクラスを使用し判定が可能なのですが。 ◆char型の場合◆ List list = new ArrayList(); //比較する文字列 String mozi = "Abc"; //ループ for(int m=0;m<mozi.length();m++) { //文字を順に小文字かどうか調べる char ccc = mozi.charAt(m); //小文字の場合に限りlistに格納 if(Character.isLowerCase(ccc) == true) { list.add(ccc); } } //表示 for(int l=0;l<list.size();l++) { System.out.println("list="+list.get(l)); } したいのが、 ◆String型◆ List list = new ArrayList(); List list2 = new ArrayList(); list.add("TEST"); list.add("sam"); list.add("OSIETE"); for(int l=0;l<list.size();l++ ) { String compareMozi =(String) list.get(l); //ここで文字列compareMoziが大文字か小文字か調べて、小文字のときだけlist2に格納する } な感じです。 宜しくお願いします。

    • ベストアンサー
    • Java
  • JAVA Servlet での全角文字判定

    JAVAでの文字列判定で、全角文字以外を入力した場合は、エラーとして扱いたいのですが、その方法がわかりません。 教えてください。よろしくお願いします。

  • javaで文字変換したいんです。

    たとえば "82 A0 82 A2 82 A4 41 42 43 82 A6 82 A8 " という文字列を "あいうABCえお"に変換したい場合どのようにすればいいのでしょう? 変換前の文字コードはS-JISとします。 変換前の文字列はStringに入っているものとします。 String str="82 A0 82 A2 82 A4 41 42 43 82 A6 82 A8 "; //こんな感じ java は初めてで困ってます。 Cなら何とかなるんですが・・・ どうかお知恵をお授けください。

    • ベストアンサー
    • Java
  • strtokでの空文字への置き換え

    大したことじゃないと言えばそうかもしれませんが、ちょっと氣になるんで質問させてください。 C言語でstrtokという函數ありますよね。 第1引數の文字列を、第2引數の文字列を構成する文字で區切る。 第2引數の文字を見つけたら、それを空文字('¥0')に置き換える。 字句の最初の文字へのポインタを返す。 このようなものだと理解しています。 次のプログラムを實行してみました。 #include <stdio.h> #include <string.h> int main(void) { char string[]="XYZ1231ABC"; int i; printf("%s\n", string); putchar('\n'); printf("%s\n", strtok(string, "1A")); printf("%s\n", strtok(NULL, "1A")); printf("%s\n", strtok(NULL, "1A")); printf("%s\n", strtok(NULL, "1A")); putchar('\n'); for(i=0; i<=10; i++) printf("string[%d]=%c\n", i, string[i]); return 0; } 結果 XYZ1231ABC XYZ 23 BC (null) string[0]=X string[1]=Y string[2]=Z string[3]= string[4]=2 string[5]=3 string[6]= string[7]=A string[8]=B string[9]=C string[10]= 私が思うには、string[7]は空文字に置き換わってしまうはずだと思うんですが、 結果は'A'のままです。 ここが '¥0'に置き換わるかどうかは しょり系によって異なるのでしょうか。

  • Javaの文字列の大小比較についてです。

    Javaでは、文字列の大小比較をする時、StringのcompareToを使用しまが… compareToの中の処理は一旦char型に直して、それを比較しているのでしょうか? また、compareToを使用せずに、プログラム内に自分で書いた場合、処理速度は変化ありますか?

    • ベストアンサー
    • Java
  • EUC_JPの文字化け

    指定された文字列(String型)を以下の様にバイト配列で保持し、 byte[] work = "指定文字列".getBytes(encoding); そのバイト配列を使用し、再度、以下の様にStringを生成します。 new String(work, encoding); (作成したプログラムを添付したいのですが、文字数の関係で割愛します。) 指定文字列は機種依存文字(丸数字等)にします。 この時、encodingにMS932、UTF-8等を指定した場合は問題なく元の文字列が 取得できますが、EUC_JPを指定すると、?に文字化けを起こします。 調査すると、getBytesでbyte配列を取得した時点で既に変換不良を起こしていました。 (丸数字全てが0x3fになっていました。期待していたコード、というか本来は、0xADA1~0xADB4のはずです。) そこでStringクラスのgetBytesメソッドをオーバーライドしちゃえという、甘い考えが浮かび、 javaのソースコードでString.javaを見ましたが、結局のところ、どこでコード変換を行っているのか よくわかりませんでした。 そこで質問です。 1)これはJDKのバグなのですか? 2)こんな経験がある。あるいはこういう対処をした。というかた、おりましたら、   参考URLでも構いませんが教えてください。 以上、よろしくお願いします。

  • javaの正規表現について質問です。

    javaの正規表現matchesに関して質問です。 正規表現を用いて文字列が半角数字のみで出来ているかどうかを判定したいと思っています。 調べたとろこ下記の正規表現で判定できそうなのですが、 正規表現のルールが理解できず困っています。 ------------------------------------------- String aaa = "0123456789"; //パターン1 aaa.matches("^[0-9]{10,11}$"); //パターン2 aaa.matches("^[0-9]+$") ------------------------------------------- パターン1 ^[0-9]   →  文字列の先頭が0~9か判定 {10,11}   →  10~11回繰り返す(繰り返すというのは[0-9]かどうかということでしょうか?)           12文字目に文字を入れた下記文字列でもfalseが返ってきました。           解釈が間違えている?           String aaa = "0123456789a"; $      →  文字列の最後が[0-9]を10~11回繰り返しているかどうか? パターン2 ^[0-9]   →  文字列の先頭が0~9か判定 +$ →  文字列の最後が???? すいません自分で書いてて混乱してきました。 どなたかアドバイス下さい。

    • ベストアンサー
    • Java