![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
お世話になります。
※タイトル、質問の中に(1)となってしまっていますが、マル1(マルのなかに1が入っている文字です)
以下要件を満たす関数を作りたいと思います
・文字列のINPUTに文字列をOUTPUTとする
・INPUTが60byte以上の場合は60byteに収まるようにしてOUTPUTする
・60byteできったときに最後の文字が2byte文字の場合はその文字は取り除いてOUTPUTする(この場合は60byteより短くなってもよい)
上記の問題を解決するために以下のようなメソッドを作りました。
public static String formatStatement(String realStatement) {
if (realStatement == null
|| realStatement.getBytes().length < CUT_SIZE) {
return realStatement;
}
byte[] b = realStatement.getBytes();
if ((int) b[CUT_SIZE - 1] < 0) {
return new String(realStatement.getBytes(), 0, CUT_SIZE - 1);
}
return new String(realStatement.getBytes(), 0, CUT_SIZE);
}
この場合多くの文字は処理できるのですが、
(1)などの機種依存文字には対応できませんでした。
あとはどのような改良を加えればよいでしょうか?
※(1)などをSystem.out.printlnすると?になってしまいます。この対処方法も教えていただけるとありがたいです。
環境
WindowsXP
Java1.4
開発環境はeclipse2.1
No.2ベストアンサー
- 回答日時:
win2000+J2SDK1.4.0で試しましたが、
私の環境では特にMS932と指定しなくても
DOSプロンプトで表示できました。
class testmain{
public static void main(String[] args) {
System.out.println(formatStatement("0123456789(1)012345678901234567890123456789012345(1)6789012(1)345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"));
}
public static String formatStatement(String realStatement) {
if (realStatement == null
|| realStatement.getBytes().length < 60) {
return realStatement;
}
byte[] b = realStatement.getBytes();
if ((int) b[60 - 1] < 0) {
return new String(realStatement.getBytes(), 0, 60 - 1);
}
return new String(realStatement.getBytes(), 0, 60);
}
}
eclipse2は使ったことないので設定方法はわかりませんが、ソースの保存形式は
SJISになっているのでしょうか?
これがUTF8やEUCになっている可能性があると思います。
またコンパイル時に-encodingを明示的にsjisを指定してみてください。
それでも駄目なら、これ以上は私には分かりません。
アドバイスありがとうございます。
ご指摘いただいたとおりでした。
eclipseの設定をUTF-8としていたので
上記の現象になっていた模様です。
ソースの保存形式をMS932としておこなったところ
期待通りの動きを致しました。
ありがとうございました。
No.1
- 回答日時:
○の中に1、それは機種依存文字ですね。
同じS-JisでもWindowsのみで定義されています(Mac等では表示できません)
他にも(株)などもそうです。
UNICODEではコード自体存在しません。
ちょっと検索したのですが
エンコードをMS932と指定すれば表示できるかもしれません。
参考URL:http://www.ioctv.zaq.ne.jp/kreuz/java/myref/stri …
この回答への補足
アドバイスありがとうございます。
コードを以下のように変更いたしましたが、
問題解決には至りませんでした。
私が文字コード自体の理解が浅いため
修正方法が誤っているのかもしれません。
byte[] b = null;
try {
b = realStatement.getBytes("MS932");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- Perl perlについての質問 2 2022/10/17 15:25
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数を動的に利用するには?
-
javaのメモリリーク?を解決す...
-
うるう年判定
-
プログラミングの問題です。大...
-
javaでOXゲーム
-
中カッコ{}だけの記述について
-
javaのプログラミングで作るRPG...
-
コンストラクタの引数の中のnew?
-
NoSuchMethodErrorが解決できま...
-
Socketの接続のタイムアウトを...
-
javaの質問です 合ってるかを...
-
インタフェイス実装と抽象クラ...
-
多次元配列の出力のところがわ...
-
続き webアプリをつくってます...
-
コンストラクタについて
-
リフレクション Method.invoke(...
-
EXCEL VBA で、0から?1から?
-
VBAで配列の計算
-
C言語のポインターに関する警告
-
実数からの小数部の取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数を動的に利用するには?
-
中カッコ{}だけの記述について
-
プログラミングの問題です。大...
-
Socketの接続のタイムアウトを...
-
System.exit()の値を取得したい
-
コンストラクタの引数の中のnew?
-
インタフェイス実装と抽象クラ...
-
JSP/Servletのパラメータの受け...
-
NoSuchMethodErrorが解決できま...
-
Javaでlog4jを使ってログ出力を...
-
ArrayList でスタックを
-
コマンドライン引数の*(アフ...
-
randomで
-
javaで特定の文字列から特定の...
-
Javaで日本語の出力が文字化けする
-
【初心者です】javaで平均値を...
-
Java プログラム public class ...
-
javaのプログラミングで作るRPG...
-
クラスを使った電卓のプログラム
-
じゃんけん プログラミング
おすすめ情報