• 締切済み

JavaのStringの最大文字列長

タイトルのとおりなんですが JavaにおけるString型の最大文字列長って決まっているのでしょうか? もしくは使用可能なメモリに依存? コード書きながらふと思っただけなんですけど、ちょっと調べた(API Referenceとか)カンジでは分からなかったので。(もっとちゃんと調べろよっていう話もありますよね。) 知ってる方いらっしゃいましたら教えていただけるとありがたいです。

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

みんなの回答

noname#208124
noname#208124
回答No.1

Integer.MAX_VALUE文字まで メモリ食い潰すのが先ですが

関連するQ&A

  • JavaのStringクラスに「外字」という概念はある?

     今、客先のデータをJavaで処理しようとしているのですが、そのデータ(Shift-JISの文字列データ)には、今まで使われてきた「外字」が含まれています。  私の知っている範囲では、Shift-JISの文字列でも、Javaで読み込んだら内部的にUnicodeに変換されるのではないかと思っているのですが(←間違っているかもしれません)、そのUnicode変換の際に外字の部分はどうなってしまうのでしょうか。また、Unicodeに変換された文字列を、出力の際にまたShift-JISに戻すことになると思うのですが、そのときにはちゃんと以前の外字コードに戻ってくれることが保証されているのでしょうか。  JavaのリファレンスでStringクラスのページで「外字」という文字列で検索してみたのですが、まったくひっかからなかったので不安になっています。  よろしくお願い致します。

    • ベストアンサー
    • Java
  • JNIの文字列長

    JAVAからJNIを使用し、Cを起動しているのですが、 10000バイト以上の文字列をJAVAに返却しようとすると10000バイトより先が文字化けしてしまいます。 Cから直接起動した場合は10000バイト以上でも処理できます。 JAVAのインターフェースは以下のようになっています。 lRet = analyzeKBN( lCountin, sWORDin, lCountout,); lCountin : int型 入力文字数 sWORDin :String型 入力文字列 lCountout : int型 出力文字数 sWORDout : String型 出力文字列 Cの中を見渡しても10000文字の制限はありまません。 cの作業領域はlCountin を元にmallocしています。 出力文字列が10000バイト以上になるときっちり10000バイト以上が文字化けして帰ってくるのですが、JNIの制限等あるのでしょうか? 宜しくお願いします。

  • java string 配列の使用メモリ

    String[][][] arg = = new String[x][x][x]; でxが638の時にjava.lang.OutOfMemoryErrorになってしまいます。 VM起動時のヒープ最大値は1GBまで試しましたがダメでした。 このときargオブジェクトはどれだけのメモリを必要とするのでしょうか?

    • ベストアンサー
    • Java
  • Perlでシフトコード変換後の文字列長をカウント

    PC上のデータに含まれる機種依存文字((1)(2)IIIなど)をEBCDICコードを使用しているホスト機にファイル転送をする時、表示可能な文字に変換を掛けようと思っています。 Perlで変換を行うところまではなんとか辿り着きました。 ところが、(1)を1.に変換すると、PC上では文字数は変わりませんが、ホストにアップロードした時に、シフトコードが入るために、最悪前後に全角文字が入っている場合は、2バイトのプラスになり、ホスト上のデータベースにインポートする時にエラーを引き起こしてしまいます。 これを防ぐため、Perl上で、文字コード変換を行う時にシフトイン&シフトアウトの発生した場合の文字列長のチェックを行いたいのですが、全角文字と半角文字の識別と長さのカウントを行う方法、なにか参考になるサイトがありましたら、教えて頂けると助かります。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • Javaでの文字化けの検出

    Javaでの文字化けの検出 byte配列をStringのコンストラクタの引数に指定してStringに変換した場合に 指定した文字コードで変換できなかった時、System.out.printlnでは"?"で表示されますが、 そのような状態を検出したいのですが、方法がわかりません。教えてください。 "?".equals(対象文字)をしてみてもイコールにならないようです... 文字コードはMS932 UTF-8 Unicodeでの使用になります。OSは日本語WindowsXPです。

  • 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
  • javaの文字コード変換について

    javaの文字コード変換についての質問ですが 1 shift_jis → jis83 → jis78 2 jis78 → jis83 → shift_jis と変換をかけたいと思っていますがどのようにすれ ばいいのでしょうか? String str = new String( "hogehoge", "XXX" ); でコンストラクタの2つめの引数に変換をかけたい 文字コードの指定をすればうまくいくのでしょうか? もしそうならなんと指定すればいいのでしょうか? 以上よろしくお願いします

    • ベストアンサー
    • Java
  • Stringオブジェクトの文字コードの変換

    NewString = new String(b.getBytes("iso-8859-1"),"Shift_JIS"); でShift-Jisに変換できるとありましたが、どうも出力の 日本語部分が3Fになってしまってうまくいきません。 テスト用に以下のコードを作ってみました。 import java.io.File; import java.io.FileWriter; import java.io.BufferedWriter; import java.io.IOException; import java.io.FileOutputStream; public class Test { public static void main(String[] args) { try{ String regex_title; regex_title = "制限をしている場合"; System.out.println(getHexString(regex_title.getBytes())); System.out.println(getHexString(regex_title.getBytes("iso-8859-1"))); regex_title = "制限をしている場合"; regex_title = getUTF8(regex_title); System.out.println(getHexString(regex_title.getBytes())); System.out.println(getHexString(regex_title.getBytes("iso-8859-1"))); regex_title = "制限をしている場合"; regex_title = getShiftJIS(regex_title); System.out.println(getHexString(regex_title.getBytes())); System.out.println(getHexString(regex_title.getBytes("iso-8859-1"))); FileOutputStream fs = new FileOutputStream("./test.txt"); fs.write(regex_title.getBytes()); fs.close(); }catch(Exception ex){ } } public static String getHexString(byte[] b){ String buff=""; try{ for(int i=0;i<b.length;i++) buff += String.format("\\x%02x", b[i]); }catch(Exception ex){ } return buff; } public static String getUTF8(String b){ try { //UTF-8へ変換 return new String(b.getBytes(), "UTF-8"); } catch (Exception e) { e.printStackTrace(); return b; } } public static String getShiftJIS(String b){ try { //UTF-8へ変換 return new String(b.getBytes(),"Shift_JIS"); } catch (Exception e) { e.printStackTrace(); return b; } } // @Override } //////////////////////////////////////////////////////////// 1. System.out.println(getHexString(regex_title.getBytes("iso-8859-1"))); の部分の出力をみると3Fに変換されています。 regex_title.getBytes("iso-8859-1")の時点で3Fな事がわかります。 何故でしょうか? 私がやりたい事はStringの内部のコードをUTF8にする事です。 NewString = new String(b.getBytes("iso-8859-1"),"UTF-8"); では、出来ていないようでした。 2. また、以下のコードを実行するとtest.txt test2.txtともに 文字コードがShiftJisで出力されるのはなぜでしょうか? 変換を行わなければ内部処理形式のUnicodeで出力されるの ではないのでしょうか? regex_title = "制限をしている場合"; FileOutputStream fs = new FileOutputStream("./test.txt"); fs.write(regex_title.getBytes()); fs.close(); File file = new File("./test2.txt"); BufferedWriter bw = new BufferedWriter(new FileWriter(file)); bw.write(regex_title); bw.close(); 上はgetBytes()が変換してるのでしょうか? 下はBufferedWriterかFileWriterが変換してる? ではString内部のByteをそのまま出力するにはどうしたら・・・。

    • ベストアンサー
    • Java
  • JavaのString、StringBuffer、Charの中でメモリ

    JavaのString、StringBuffer、Charの中でメモリの使用が一番良いものは? Java初心者です。 現在JavaMEのMIDP(2.0)で辞書アプリケーションを作成しています。 携帯電話のメモリが小さいことから不向きではあると思っていますが、できるだけ多くの単語と説明を登録していようとしています。 基本的な文法は通常のJavaと同じだと思います。 大まかな構造は不要部分を省きますと、 ----- class Dictionary extend Canvas(){  int i,j,start=0,end=0,x=1;  private static Font fontL=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN,Font.SIZE_LARGE);  void paint(Graphics g){   //getsetsumei(x)で単語の意味・説明をString型で受け取っています。   //substringで一文字ずつ増やしながら文字の横幅をgetWidthで受け取り、   //描画画面横幅の最大値240を越えないように部分文字列で表示しています。   //文字の続きは文字サイズの縦幅をfontL.getHeight()で取得し、   //改行のような形で続けて表示します。   //また描画画面縦幅の最大領域getHeight()を越えて表示しないために   //i行目までに描画した文字列の縦幅の総和がこれを越えないようにすることで、   //無駄な描画をしないようにしています。   for(i=1;i!=0 && i*fontL.getHeight()<getHeight()-130;i++){//画面縦幅の描画範囲の判定    while(fontL.stringWidth(getsetsumei(x).substring(start,end+1))<240){//画面横幅の描画範囲の判定     end++;//横幅に達するまで文字数を増やす     if(end==getsetsumei(x).length()){//表示すべき文字列の取得が終わった      g.drawSubstring(getsetsumei(x),start,end-start,0,130+x,Graphics.TOP|Graphics.LEFT);      i=-1;//終了条件のi!=0を満たさなくするため      break;     }    }    //描画すべき文字列の一部をSubstringで描画    g.drawSubstring(getsetsumei(x),start,end-start,0,130+y,Graphics.TOP|Graphics.LEFT);    start=end;//次の行の描画すべき部分文字列の開始位置を指定    y+=fontL.getHeight()+1;//改行のためのy座標の移動   }  }  String getsetsumei(int DicNum){   switch(DicNum){   case 0:return " ";//説明無し   case 1:return "辞典,辞書,字引";//Dictionaryの意味、説明   }  } } ----- となっています。 実際は単語の意味をString型で返すgetsetsumeiの引数xの値を変化させて単語に合わせて意味を取得しようとしています。 改行するプログラムのためにgetsetsumei関数は何度も呼ばれることになるので、できるだけメモリを使用せず、高速にしたいと思っています。 色々調べたところStringは非可変文字列であるとのことでした。 これは説明内容が変更されるたびに別のメモリを確保するということでしょうか? それとも同じメモリに新しい説明が上書きされるのでしょうか?その場合、StringではなくStringBufferを使用すべき、もしくはchar配列を使用すべきでしょうか? どなたかご教授願います。

    • ベストアンサー
    • Java
  • VBScriptの文字列の最大文字数は?

    初心者です、ASPのVBScriptの文字列の最大文字数は何文字でしょうか? また、ウェブ上で見ることのできるVBScriptのリファレンスマニュアルなどでよいものは無いでしょうか? オンラインヘルプも在るようですが使用し方が分かりませんのでその当りのアドバイスお願いできればと思います・

専門家に質問してみよう