こんにちわ。
現在、1バイトと2バイト文字混在の文字列の長さを
1バイト文字の長さは1
2バイト文字の長さは2
で知りたいのですが、String.lengthでは2バイト文字も長さ1になってしまいます。
String.getBytesを使用して何とか出来そうなのですが・・・
宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

byte[] のサイズはどうやれば知ることができるのか、ってことですか?



import java.lang.reflect.Array;

class G {
public static void main(String[] arg) {
String s = new String("あ");
System.out.println("getBytes() = " + Array.getLength(s.getBytes()));
}
}

こういうこと?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QString(byte[] bytes, int offset, int length)の文字コードは?

String(byte[] bytes, int offset, int length)は、バイト配列(8bitずつのまとまり)を、文字列型に直す、というものだと思うのですが文字コードは何にしたがって直すのでしょうか?

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html

Aベストアンサー

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int%29

>プラットフォームのデフォルト文字セットを使用して、

日本語WindowsならShift_JISでしょう。他の環境では解りません。

#なので僕は

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int,%20java.lang.String%29

で指定するほうが好きです。(コードを読む人に,誤解を与えにくく,異なる環境でも挙動を一致させやすいから移植性も高まると考えるため)

どうしてもデフォルトがほしけりゃ
http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html#defaultCharset%28%29
があるわけですし

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int%29

>プラットフォームのデフォルト文字セットを使用して、

日本語WindowsならShift_JISでしょう。他の環境では解りません。

#なので僕は

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int,%20java.lang.String%29

で指定するほうが好きです。(コードを読む人に,誤解を与えにくく,異なる環境でも挙動を一致させやすいか...続きを読む

QStringクラスのlengthメソッドについて

こんにちは、Stringクラスのlengthメソッドについて質問させてください。

今まで配列のlengthは、宣言時に長さが決定するからメソッドではなく、finalフィールドで十分。
ArrayListだとかは長さが変わるからメソッドという意識を持っていました。
(カプセル化の概念とも関わりますが)

先日その話しをしていたら、「でも文字列(Stringオブジェクト)の長さも不変だよね。」と言われました。
確かに文字列の長さは不変なのに、長さの取得にはメソッドを使っています。

言語仕様として一貫性を持たせるなら、配列もlengthメソッドにするか、文字列をlengthフィールドにしたほうが綺麗だと思うんです。

Stringクラスのソースコードを見ていたら、文字列の長さは内部的に
private int count; と宣言されていました。
そして、lengthメソッドは return count; しているだけでした。

ただ、このcountフィールドに値を代入しているのはコンストラクタ内だけだったので、
public final int length; とすれば、良かったのでは?と思いました。

この考えについて、
それは間違っている、とか歴史的な背景などご存知でしたらご教授ください。

よろしくお願致します。

こんにちは、Stringクラスのlengthメソッドについて質問させてください。

今まで配列のlengthは、宣言時に長さが決定するからメソッドではなく、finalフィールドで十分。
ArrayListだとかは長さが変わるからメソッドという意識を持っていました。
(カプセル化の概念とも関わりますが)

先日その話しをしていたら、「でも文字列(Stringオブジェクト)の長さも不変だよね。」と言われました。
確かに文字列の長さは不変なのに、長さの取得にはメソッドを使っています。

言語仕様として一貫性を持たせるな...続きを読む

Aベストアンサー

あくまで想像ですが・・・

長さを問い合せる場合、括弧付きの「length()」である方がオブジェクト指向
らしい方法と思います。

配列のlenghthは、あくまでフィールドです。
つまり、いくつ配列に格納したか、ではなく、配列として準備した個数を格納
しているにすぎません。

Stringの長さが「不変である」というのは、Stringの性質ではなく、たんに
そういうクラスを作っただけのことなので、結果論からfinalにするのは
設計上正しいとは思えません。
可変のStringクラスだってあってもいいのでは?

Qid=a1 id=a2 id=a3 のようなid="a"+i のlengthを求めたい

id=a1 id=a2 id=a3 のようなid='a'+i のlengthを求めたい
のですが、どのようにするのでしょうか?

Aベストアンサー

たとえばこんな感じでどうでしょう?

<script>
window.onload=function(){
var tags=document.getElementsByTagName("*");
var count=0;
for(var i=0;i<tags.length;i++){
if(tags[i].id.match(/^a[0-9]+$/)) count++;
}
alert(count);
}
</script>

<div id="a1">a1</div>
<div id="a2">a2</div>
<div id="a3">a3</div>
<div id="a100">a100</div>
<div id="b1">b1</div>
<div id="b2">b2</div>
<div>none</div>

QString a = "a"; と String b = new String ("b"); の違い

String a = "a";
String b = new String ("b");

お伺いしたいのですが、
b は String のインスタンスを作ってると思いますが、
a はどんなことをしてるのでしょうか?

Aベストアンサー

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その初期化に使った無名のStringインスタンスの3つがメモリ上に存在することになります。
if(b1 != b2) System.out.print("b1とは違うインスタンス");
の結果でもわかると思います。

したがって、
String b = new String ("b"); というのは、Integerに例えると
Integer i = new Integer(new Integer(1)); という処理を
していることになり、ひとつ無駄なインスタンス生成となります。

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その...続きを読む

QMap Hash = new Hash

Map<String, String> Hash = new HashMap<String, String>();

このjavaのハッシュマップの初期化の方法を教えてください。

Aベストアンサー

2回目?
1回目と同じですよ。

Map<String, String> Hash = new HashMap<String, String>(); //1回目
Hash = new HashMap<String, String>(); //2回目
Hash = new HashMap<String, String>(); //3回目
Hash = new HashMap<String, String>(); //4回目
//このあとも好きなだけどうぞ・・

なにか質問の意味を勘違いしてますかね?


人気Q&Aランキング

おすすめ情報