• ベストアンサー

char型からのバイト数取得

文字列から1文字ずつバイト数を取得(判定)したいのですが、 char型の文字のバイト数を取得するスマートな方法はありますか? 今考えているのは以下のようなコードです。 String str ="あA" for(int i=0; i < str.length(); i++) { char ch = str.charAt(i); StringBuffer SB = new StringBuffer(); SB.append(c); if(SB.toString().getBytes.length == 1) { //1バイトの処理 } else { //2バイトの処理 } }

  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • Ceren
  • ベストアンサー率49% (90/183)
回答No.1

もっと根本的に直す方法があるかもしれませんが、 とりあえずこんな感じで少しすっきりすると思います。 String str ="あA"; char[] ch = str.toCharArray(); for(int i=0; i < ch.length; i++) { int bytes = Character.toString(ch[i]).getBytes().length; 以下略

mokoron
質問者

お礼

回答ありがとうございました。 アドバイスいただいたようにしてみます!

その他の回答 (1)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

char ch = str.charAt(i); に対して int l = Character.toString(ch).getBytes().length; でプラットフォームのデフォルト文字セットでの文字のバイト長lが得られます。 文字セットを指定したい場合は int l = Character.toString(ch).getBytes(charsetName).length; とすればよいでしょう。 ただし、文字列を1文字ごと処理するならcharを使わずsubstringで一文字文字列を抽出してしまう方が簡単かもしれません。 すなわち String ch = str.substring(i, i+1); int l = ch.getBytes().length; のようにです。

mokoron
質問者

お礼

回答ありがとうございました!

関連するQ&A

  • avaというか文字列について少し質問です><

    avaというか文字列について少し質問です>< お願いします。 シーザー暗号で文字列をずらすためのクラスのメソッドをつくったのですが・・・ 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というか文字列について少し質問です><

    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
  • 文字列から半角スペースと全角スペースを取り除く処理

    DBから取得した文字列に半角スペースか全角スペースが 含まれている場合取り除きたい、と考えています。 以下の様なロジックを考えているのですが、 こんな感じで良いのでしょうか。 普通は、どの様にするのでしょうか? アドバイスなどありましたら、お願い致します。m(__)m private String test(String str) {  StringBuffer sb = new StringBuffer();  char[] chr = str.toCharArray();  for(int p=0;p<chr.length;p++) {   if( chr[p] == ' ' || chr[p] == ' ' ) continue;   sb.append(chr[p]);  }  return sb.toString(); }

    • ベストアンサー
    • Java
  • char型での演算子

    畏れ入ります。 X番目の文字を調べたいとき strにStringbufferで文字列が入っていた場合 if(str.charAt != "") とすることができません。 互換性のない型、と出てしまいます。 また、""を’’ とすると、「空の文字リテラルです」 と出てしまいます。 charが空であることを調べるのにはどうすればいいですか?

    • ベストアンサー
    • Java
  • ハイフンを"-"から"-"にしたい。

    ハイフンを"-"から"-"に変換する作業でご質問があります。 例えば半角数値と半角ハイフンしかない文字列だと String 全角(String s) { StringBuffer sb = new StringBuffer(s); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c >= '0' && c <= '9') { sb.setCharAt(i, (char) (c - '0' + '0')); } else if (c >= '-' && c <= '-') { sb.setCharAt(i, (char) (c - '-' + '-')); } } return sb.toString(); } でハイフン含めたすべて全角になるのですが String 全角(String s) { StringBuffer sb = new StringBuffer(s); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if ((c >= '0' && c <= '9')) { sb.setCharAt(i, (char) (c - '0' + '0')); } else if (c >= 'a' && c <= 'z') { sb.setCharAt(i, (char) (c - 'a' + 'A'));に ハイフンの半角から全角の構文を加える方法はありますでしょうか?? どうぞよろしくお願いします。

    • ベストアンサー
    • Java
  • どこがエラーか確認してください…

    プログラムを作ったのですが、さまざまなエラーが出てしまいます。 与えた引数を数字と文字にわけるというプログラムです。 public class Selection { private static final char[] nch = { '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' };//0から9までの数字をchar型配列要素として定義 public static String numbersonly(String inputstr) { StringBuffer bfn = new StringBuffer(); for (int i = 0 ; i < inputstr.length(); i++) { for (int j = 0;j < nch.length() ; j++) { if(inputstr.charAt(i) == nch[j]) bfn.append(inputstr.substring(i)); //bfnにinsputstrのi番目の文字を付け足す } } return; bfn.toString(); //bfnをstring型に変えて戻り値 } //numbersonlyメソッドの場合と同様に以下も補う public static String lettersonly(String inputstr) { StringBuffer bfn =new StringBuffer(); boolean let; for (int i = 0; i < inputstr.length(); i++) { let = true; for(int j = 0; j < nch.length(); j++) { if(inputstr.charAt(i) == nch[j]) let =false; } if (let)bfn.append(inputstr.substring(i)); } return;bfn.toString(); } } はじめのchar型配列要素として定義するところでシンボルを解決できません、となっているので、そのほかのnchを使う部分(lengthメソッド、戻り値)にも影響が出ているのか、jのlengthメソッドもどちらともシンボル解決できず、それぞれreturnでは戻り値がありません、となります。

    • ベストアンサー
    • Java
  • 三つの文字を順に並べるプログラム

    三つの文字を入力して、順番に並べて表示させるプログラムが作りたいのですが、どうしたらいいのかわかりません。 二つまではできました。以下に記します import java.io.*; class Sample { public static void main(String args[]) throws IOException { System.out.println("文字列1を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1=br.readLine(); System.out.println("文字列2を入力してください。"); String str2=br.readLine(); int s = 1,t = 0; if(str1.length()>str2.length()){ int len=str1.length(); StringBuffer sb=new StringBuffer(str1); while(s<len+1){ sb.insert(s,str2.charAt(t)); s=s+2; t++; } System.out.println("文字列は"+sb+"となる。"); }else{ int len=str2.length(); StringBuffer sb=new StringBuffer(str2); while(s<len+1){ sb.insert(s-1,str1.charAt(t)); s=s+2; t++; } System.out.println("文字列は"+sb+"となる。"); } } } str1に123 str2に45といった風に入力すると14253といった風になります。 これにstr3を加え、str3が6789ならば、146257389 となる風にしたいです。

    • ベストアンサー
    • Java
  • (再質問)VC#でテキストボックスに入力した文字列をビット列に変換

    No.1017874で質問して回答頂いたのですが、うまくいきませんでした。質問の仕方が悪かったのかもしれません。締切ってしまったので再質問します。 テキストボックスに入力した文字列を2進数の文字列(0と1)に変換したいのですが、下記のプログラムでは、2や8が含まれます。 例えば、"シ"はシフトJISでは16進数で8356なので、1000001101010110となってほしいのですが、下記プログラムでは128000001281280128012801281280となりました。 sb.Append(b & 0x80)の部分で(b & 0x80)が2進数10000000(10進数で128)の場合に10進数にしてsbに加えるためだと思いますが、 最上位ビット(この場合は1)だけを加えていくと、ほしい結果が得られそうです。 その方法を教えて下さい。 private void button2_Click(object sender, System.EventArgs e) { int i,j; Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS"); string str = textBox1.Text; byte[] bytes = sjisEnc.GetBytes(str); StringBuilder sb = new StringBuilder(); for (i = 0; i < bytes.Length; i++) { byte b = bytes[i];    for (j = 0; j < 8; j++) { sb.Append(b & 0x80);      b <<= 1; } } String binaryString = sb.ToString(); textBox1.Text = binaryString ; } 参考ページ(文字列をシフトJISとしてバイト列に変換するには?) http://www.atmarkit.co.jp/fdotnet/dotnettips/010str2byte/str2byte.html

  • char型の文字数を数えるには

    Unicode環境で char* str = "あ1い23"; のような場合、strの文字数を数えるには どうしたらいいでしょうか? この場合 5 を取得したいです。 お願いします。

  • 文字列を逆転させて表示するには

    Java超初心者です。 タイトルの通りJavaで文字列を逆転させたいのです(出力まで含む)。 文字列abcdefgをgfedcbaみたいな感じでです。 以下に自分が分かる範囲で書いてみました(分からない部分が多いので未完成です、すいません)。 //の部分のコメントアウトした箇所はJavaの方で元々逆転させる文法があるらしく、それを検索して書きました(今回は無視してください)。 しかしもっと基本的な文法を用いた方法が出来ないと駄目だと思い、今回はreverse等の既存の文法を使わず、繰り返しのfor文とchar型で文字を1つ1つ連結して文字列を逆転した形にしたい訳です。 私の作成した文は関係ない文があったり、おかしいところが多々あると思いますが、どうしたらよいか教えてください(実際以下のプログラムの出力結果が目標とかけ離れているのは承知してます、恥ずかしいですがあえて状況を把握して欲しいので載せます)。 よろしくお願いします。 public class hantai { public static void main(String[] args) { String str = "abcdefg"; int length = str.length(); System.out.println("length " + length); System.out.println("charAt(0)=" + str.charAt(0)); String value =""; for(int i = 0; i < str.length(); i++) { char c = str.charAt(i); value = value + c; System.out.println(value); //StringBuffer sbrev = new StringBuffer(str); //String strrev = sbrev.reverse().toString(); //System.out.println(strrev); } } } ホント、こんなレベルなんで暇なときにでも解答お願いします、ハハ・・・orz

    • ベストアンサー
    • Java