質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

2回答

7061閲覧

javaで対象文字列にの左右にスペースを入れて中央寄せの文字列を作成したい

sisyamo-1105

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

1クリップ

投稿2020/05/01 23:42

編集2020/05/02 04:29

前提・実現したいこと

javaで対象文字列にの左右にスペースを入れて中央寄せの文字列を作成したい
すでに文字列の左側に空白を入れるメソッドと文字列の右側にスペースを入れるメソッドはあるのでそれを使用して中央寄せをしたい

発生している問題・エラーメッセージ

引数を変更しても変化が見られない
期待したこと「    target 」という結果

hoge = rightPad(target, (byt-target.getBytes().length)+target.getBytes().length, str); hoge = leftPad(hoge, (byt-target.getBytes().length)+target.getBytes().length, str);

出力結果「taegrt」(変化なし
期待したこと「    target 」という結果

hoge = rightPad(target, (byt-target.length())+target.length(), str); hoge = leftPad(hoge, (byt-target.length())+target.length(), str);

出力結果「taegrt」(変化なし

期待したこと 引数を変更することによりどのような変化が現れるのか検証する

hoge = rightPad(target,50, str); hoge = leftPad(hoge, 50, str);

出力結果「taegrt](変化なし)

該当のソースコード

//問題の中央寄せのメソッド。

public static String toCenter(String target, int byt, String str) { String hoge = ""; if (!isPaddable(target, byt, str)) { return target; } hoge = rightPad(target,target.getBytes().length+(byt-target.getBytes().length)/2,str); hoge = leftPad(hoge,target.getBytes().length+(byt-target.getBytes().length)/2,str); return hoge; }

//右寄せメソッド、左寄せメソッド

// 対象文字列の左側に指定された文字列を詰めて指定サイズに整形する public static String leftPad(String target, int size, char padChar) { return leftPad(target, size, String.valueOf(padChar)); } // 対象文字列の左側に指定された文字列を詰めて指定サイズに整形する public static String leftPad(String target, int size, String padString) { // 入力チェック if (!isPaddable(target, size, padString)) { return target; } int padSize = size - getBytesAsShiftJIS(target); return substringBytes( padString.repeat((int) Math.ceil((double) padSize / getBytesAsShiftJIS(padString))), 0, padSize) + target; } // 対象文字列の右側に指定された文字列を詰めて指定サイズに整形する public static String rightPad(String target, int size, char padChar) { return rightPad(target, size, String.valueOf(padChar)); } // 対象文字列の右側に指定された文字列を詰めて指定サイズに整形する public static String rightPad(String target, int size, String padString) { // 入力チェック if (!isPaddable(target, size, padString)) { return target; } int padSize = size - getBytesAsShiftJIS(target); return target + substringBytes( padString.repeat((int) Math.ceil((double) padSize / getBytesAsShiftJIS(padString))), 0, padSize); }
//メソッドに入れる値 writer.println("Util.toCenter(\"1234\", 20, null) ==> " + Util.toCenter("1234", 20, null)); writer.println("Util.toCenter(\"1234\", 20, \"\") ==> " + Util.toCenter("1234", 20, "")); writer.println("Util.toCenter(null, 20, \"+\") ==> " + Util.toCenter(null, 20, "+")); writer.println("Util.toCenter(\"\", 20, \"+\") ==> " + Util.toCenter("", 20, "+"));

試したこと

中央寄せメソッドの引数bytが異なるとの旨があったので変更してみたが、何も変化が現れない。

補足情報(FW/ツールのバージョンなど)

右寄せメソッド・左寄せメソッド・メソッドに入れる値のコードは正しいので、中央寄せメソッドを変更しての訂正をお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mit0223

2020/05/02 00:56

ソースコードを ``` で囲んで整形してもらえますか。
ikadzuchi

2020/05/02 02:55

「引数を変更しても変化が見られない 」では状況がよく分かりません。 「どのような入力に対し、どのような出力を期待し、実際にどのような出力が出たか」を書いてください。
退会済みユーザー

退会済みユーザー

2020/05/02 04:58

HTMLとして出力した場合スペースは解釈されません的ななにかかな
退会済みユーザー

退会済みユーザー

2020/05/02 05:20

Javaでって書いてあるけど、出力先とか使っているライブラリとかそういう説明が一切ないので、 答えようがないのでは。
guest

回答2

0

対象文字列が半角だけで、左右に入れるのがスペースだけなら簡単です。

Java

1class Main { 2 public static String adjustCenter(String str, int width) { 3 if (str.length() >= width) return str; 4 int right = width - (width - str.length()) / 2; 5 String s = String.format("%-" + right + "s", str); 6 return String.format("%" + width + "s", s); 7 } 8 9 public static void main(String[] args) { 10 System.out.println("[" + adjustCenter("target", 20) + "]"); 11 } 12}

投稿2020/05/05 04:05

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

初めての投稿で何かとわからないところが多くありまして、至らない点が多くご迷惑おかけして申し訳ありません。

上記メソッドは他のメソッドの改善により解決しました。

次からはもう少し質問方法を勉強してから質問するようにいたします。

間違っていたところはisEmptyメソッドのif文returnがtrue、false逆になっていたためでした。
そのためすべて値がisPaddableの入力チェックでreturn targetとなってしまい処理をせずに終了していたため変化が何も起こらなかったということでした。

説明や質問の仕方が悪くご迷惑おかけして申し訳ありません。

'''
//文字列を指定サイズで中央寄せするメソッドを作成してください。
//※作成済みのメソッド"leftPad", "rightPad" を参考にしてください。
public static String toCenter(String target, int byt, String str) {
String hoge = "";

if (target == null) { return target = ""; } if (str == null) { return target = ""; } int n = getBytesAsShiftJIS(str); //getBYtesASSHIftJIseメソッドは引数のバイト数を返すメソッド hoge = rightPad(target, (byt + n - getBytesAsShiftJIS(target)) / 2 + getBytesAsShiftJIS(target), str); hoge = leftPad(hoge, byt + 1, str); return hoge; } public static String substringBytes(String target, int beginIndex, int endIndex) { StringBuilder result = new StringBuilder(); int size = 0; for (char chr : target.toCharArray()) { size += getBytesAsShiftJIS(chr); if (size < endIndex) { if (beginIndex <= size) { result.append(chr); } } else { break; } } return result.toString(); } // 対象文字列の左側に指定された文字列を詰めて指定サイズに整形する public static String leftPad(String target, int size, char padChar) { return leftPad(target, size, String.valueOf(padChar)); } // 対象文字列の左側に指定された文字列を詰めて指定サイズに整形する public static String leftPad(String target, int size, String padString) { // 入力チェック if (!isPaddable(target, size, padString)) { return target; } int padSize = size - getBytesAsShiftJIS(target); return substringBytes( padString.repeat((int) Math.ceil((double) padSize / getBytesAsShiftJIS(padString))), 0, padSize) + target; } // 対象文字列の右側に指定された文字列を詰めて指定サイズに整形する public static String rightPad(String target, int size, char padChar) { return rightPad(target, size, String.valueOf(padChar)); } // 対象文字列の右側に指定された文字列を詰めて指定サイズに整形する public static String rightPad(String target, int size, String padString) { // // 入力チェック if (!isPaddable(target, size, padString)) { return target; } int padSize = size - getBytesAsShiftJIS(target); return target + substringBytes( padString.repeat((int) Math.ceil((double) padSize / getBytesAsShiftJIS(padString))), 0, padSize); } // パディング可否判定 private static boolean isPaddable(String target, int size, String padString) { return !isEmpty(target) && 0 < size && !isEmpty(padString) && 0 < size - target.length(); //return false; }

}

public static boolean isEmpty(String target) { if (target == null || target.matches("")) { return true; } return false; }

'''

実行するコード
'''
writer.println("Util.toCenter("1234", 20, null) ==> " + Util.toCenter("1234", 20, null));
writer.println("Util.toCenter("1234", 20, "") ==> " + Util.toCenter("1234", 20, ""));
writer.println("Util.toCenter(null, 20, "+") ==> " + Util.toCenter(null, 20, "+"));
writer.println("Util.toCenter("", 20, "+") ==> " + Util.toCenter("", 20, "+"));
writer.println("Util.toCenter("1234", 20, "-") ==> " + Util.toCenter("1234", 20, "-"));
writer.println("Util.toCenter("12345", 20, "-") ==> " + Util.toCenter("12345", 20, "-"));
writer.println("Util.toCenter("1234", 20, "??") ==> " + Util.toCenter("1234", 20, "??"));
writer.println("Util.toCenter("1234", 20, "??") ==> " + Util.toCenter("1234", 20, "??"));
writer.println("Util.toCenter("$$$$", 20, "??") ==> " + Util.toCenter("$$$$", 20, "??"));
writer.println("Util.toCenter("$123", 20, "??") ==> " + Util.toCenter("$123", 20, "??"));

'''

投稿2020/05/05 01:22

編集2020/05/05 04:28
sisyamo-1105

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuma-s

2020/05/05 03:20

解決した方法を具体的に示していただけませんか?
kazuma-s

2020/05/05 03:21

質問にはできるだけ、コンパイル可能なソースコードを付けてください。お願いします。
kazuma-s

2020/05/05 07:48

Util.toCenter("$123", 20, "あいうえ") ==> [あい$123あいうえあ] 中央になっていないのではありませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問