• 締切済み

文字列に\nを入れたい

データベースAccessからデータを取得しTextFieldにその取得したデータを表示させたのですが、文字数が長くてTextFieldに収まらなくなっしてしまいました。そこで取得した文字列に新たに\nを入れて改行させようとしています。 String str = "文字列40字以上…" if(str.length >= 40){ ***処理内容*** 文字列が40字以上なら40文字目のすぐ後ろに\nを足して改行させて表示させたい。 ただし、40文字目を区切りとして改行させ表示させる。例)96文字なら3行に表示させるようにする。 } このような処理を行いたいのですが、良い方法がわかりません。アドバイスをお願いします。

みんなの回答

  • takaP-
  • ベストアンサー率79% (83/105)
回答No.3

>java.lang.NullPointerException これは初期化されていない変数を参照したということ。 引数として送られてくる String 配列の文字列をきちんと 初期化してから送っていますか? それに、このソースでは上記の問題を解消したとしても 次々に、新たな問題が出てきます。 前回の「空白文字」の件もそうですが、バグ取りやロジック の組み立ては人に聞いてばかりでは能力は伸びませんよ。 例えば次に出てくる問題は、私が示したソースの内容を 理解する以前に自分のソースに取り込もうとした結果だ と思われますが、小さなサンプルプログラムを作ったり、 自分なりに改良を重ねるなり、時には紙上に数値の変動 を書き込むなりの努力を払ってこそスキルの向上がある と思います。 ヒントは offset 。がんばってください。

u-mesh12
質問者

お礼

前回のエラーNullPointerExceptionに対するエラーはif文を使用することにより、このエラーには対処できるようになりました。けどtakaP-さんの言われるとおり現在は違うエラーが発生しています。現在は全体のソースをもう一度見直し改善している最中です。色々とアドバイスありがとうございます。

すると、全ての回答が全文表示されます。
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.2

///////////////////////////////////// for(int i=1; i<=times[i]; i++){ offset=limit*i+i;    sb[i].insert(offset,br); str[i] = sb[i].toString(); } return str; } } このようなクラスを作成してみたのですが、コンパイルすると MyBR.java:23 \12288は不正な文字です。 sb[i].insert(offset,br); となってしまうのですが、brには\n使えないのでしょうか? ////////////////////////////////////////// 恐らく、実際にコンパイルしたソースのコピペだと 思いますが、見ての通り問題の箇所だけにインデント がなされていますよね。 要するに「全角空白文字」が行頭にあるというエラー です。

u-mesh12
質問者

補足

全角スペースが入っていたのでエラーが発生していたのですね。もう1つ質問なんでが、このようなメソッドを作成しました。 public class Paragraph{ public String[] MyParagraph(String[] s){ String str[] = new String[9]; int times[] = new int[9]; int limit = 40; int offset = 0; char br = '\n'; for(int i=0; i<9; i++){ StringBuffer sb = new StringBuffer(s[i]); times[i] = sb.length()/limit; if(times[i] > 0){ offset=limit*i+i; sb.insert(offset,br); str[i] = sb.toString(); } else{ str[i] = sb.toString(); } } return str; } } メインクラスのほうで public class xml extends Frame{   … Paragraph para = new Paragraph(); String[] myArray = new String[9];   … ここで使用します。 myArray = para.MyParagraph(myArray);   … Frameで出力されたボタンを『出力』押すとMS-DOSのほうでエラーが出ます。 java.lang.NullPointerException at java.lang.StringBuffer<init>(StringBuffer.java:129) at Paragraph.MyParagraph(Paragraph.java:10)   … というエラーが出力されます。 String型を→StringBufferに変換するところでエラーが発生しているようなのですがこの変換だとまずいのでしょうか?

すると、全ての回答が全文表示されます。
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.1

幾つも方法はあるでしょうね。 条件によっても選択肢は替わってくるだろうし。。。 ただ単純に文字列に改行文字を追加するだけならば java.lang.StringBuffer#insert() で済みそうな気もします。 String str="文字列40字以上・・・"; StringBuffer sb=new StringBuffer(str); int limit=40; int times=sb.length()/limit; int offset=0; char br='\n'; for(int i=0 ; i<=times ; i++){   offset=limit*i+i;   sb.insert(offset,br); } System.out.println(sb.toString());

u-mesh12
質問者

補足

public class MyBR{ public String[] BR(String s1, String s2, String s3, String s4, String s5, String s6){ String str[] = new String[7]; StringBuffer sb[] = new StringBuffer[7]; int times[] = new int[7]; int limit=40; int offset=0; char br='\n'; sb[1] = new StringBuffer(s1); sb[2] = new StringBuffer(s2); sb[3] = new StringBuffer(s3); sb[4] = new StringBuffer(s4); sb[5] = new StringBuffer(s5); sb[6] = new StringBuffer(s6); for(int i=1; i<=6; i++){ times[i] = sb[i].length()/limit; } for(int i=1; i<=times[i]; i++){ offset=limit*i+i;    sb[i].insert(offset,br); str[i] = sb[i].toString(); } return str; } } このようなクラスを作成してみたのですが、コンパイルすると MyBR.java:23 \12288は不正な文字です。 sb[i].insert(offset,br); となってしまうのですが、brには\n使えないのでしょうか?

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