java アプリ の質問です。


nagasa = MOJI_DATA.length();



kirinuki = MOJI_DATA.substring( 0,10 );

などで、文字を切り抜く場合、半角も全角も一文字として扱われますが、これを
「半角は0.5、全角は1」というような感じで判断ができないでしょうか?

現在、どちらも同じ1文字で数えてしまい、区別をつけられないのでちょっと困っています。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/09/07 23:02:45
  • 終了:2006/09/14 23:05:02

回答(7件)

id:salic No.1

salic回答回数175ベストアンサー獲得回数12006/09/07 23:45:47

ポイント18pt

Byteに変換してカウントするのは駄目ですか?

http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/Byte.h...

id:kunit_mac No.2

kunit_mac回答回数43ベストアンサー獲得回数02006/09/08 09:31:33

ポイント17pt

http://www.yahoo.co.jp/

double nagasa = MOJI_DATA.toCharArray().length / 2.0;

これでどうでしょうか。

id:ksaito11 No.3

ksaito11回答回数44ベストアンサー獲得回数42006/09/08 09:59:57

ポイント17pt

こちらの情報は参考になるでしょうか。

http://java-house.jp/ml/archive/j-h-b/031699.html

id:kunit_mac No.4

kunit_mac回答回数43ベストアンサー獲得回数02006/09/08 11:24:17

ポイント17pt

http://www.infoseek.co.jp/

すみません勘違いしてました。

double nagasa = MOJI_DATA.getBytes().length / 2.0;

こちらですね。

id:b-wind No.5

b-wind回答回数3344ベストアンサー獲得回数4402006/09/08 12:25:54

ポイント17pt

Java の String 型はすべての文字を UNICODE として扱いますので、全角半角での違いは一切ありません。


方法1

ご自分で対応表(この場合は半角のみ)を作成しそちらとのマッピングで計算していく。


方法2

http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/String...(java.lang.String)

String#getBytes(String charset) を使用することで、指定した charset でのバイト数が分かります。

charset には "Shift_JIS","EUC_JP" 等が入りますが、ここでもすべての半角が 1byte である保障はありません。


方法3

http://www-306.ibm.com/software/globalization/icu/index.jsp

http://blog.ozacc.com/archives/000480.html

IBM が ICU4J というライブラリを公開しています。こちらをうまく使えば判別は可能ではないでしょうか。

id:yyok No.6

yyok回答回数59ベストアンサー獲得回数32006/09/08 13:39:09

ポイント17pt

前の方の回答にあるとおり、Javaはunicodeなので半角全角の区別はありません。

unicodeですが、先頭の255文字まではASCIIコードと互換性を保っています('\u0000'~'\u00ff')。

文字列.charAt(index).hashCode();

で文字コードを取得。ASCIIコード内、半角文字か判定しながら処理をするしかないと思います。

http://java.sun.com/j2se/1.4/ja/docs/ja/api/index.html

id:mitszo No.7

mitszo回答回数6ベストアンサー獲得回数02006/09/08 14:21:56

ポイント17pt

http://www.yahoo.co.jp/

URLはダミーです。

あるバイト数に収まる文字列の切り出しをしたいと言うことであれば、

MOJI_DATA.subString(0, i).getBytes().length

でバイト長を見ながら切り出し桁数を決定すればできそうに思いますが。。。

ちょっと適当ですが、こんな感じでいかがでしょう?

for (int i=0 ; true ; i++) {
  if (MOJI_DATA.substring(0, i+1).getBytes().length > 10) {
    System.out.println(MOJI_DATA.substring(0, i));
    break;
  }
}

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • 全角は半角の2倍 prima materia diary 2006-09-14 23:47:59
    getBytes()を使うと単純にいかない。理由は2つ。
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません