javaで以下のようなこと実装しようとするには、
どうすればよろしいでしょうか。
(例)
対象の文字列 "009000" → "〇〇9000"
対象の文字列 "900012" → "900012"
〇は半角スペース
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
前方の「0」の桁数が決まっていない場合はどうすればよろしいでしょうか。
こんな感じでできます。
Java
1class Main { 2 static String replace(String src) { 3 return Pattern.compile("^0+") 4 .matcher(src) 5 .replaceFirst( 6 zeros -> " ".repeat(zeros.group().length()) 7 ) 8 ; 9 } 10 11 public static void main(String[] args) { 12 var valueA = "009000"; 13 var valueB = "900012"; 14 15 System.out.println(replace(valueA)); 16 System.out.println(replace(valueB)); 17 } 18}
実行結果 Wandbox
9000 900012
ただしバージョンに依っては一部書き換える必要があります。
- String#repeat は Java11 以降の実装です。
- Matcher#replaceFirst(Function<MatchResult, String>) は Java9 以降の実装です。
古いバージョンに対応させるのは決して難しく無いですが、多少面倒です。
あるいは
文字列が10進数字列であると仮定します。
そのとき正規表現に拘らないのであれば、数値化してから桁数を合わせれば良いです。
Java
1static String replace(String src) { 2 return String.format( 3 "%" + src.length() + "d", 4 Integer.parseInt(src) 5 ); 6}
投稿2019/10/03 07:31
総合スコア35668
0
ベストアンサー
こういうことでしょうか
String valueA = "009000"; String valueB = "900012"; if (valueA.matches("00.*")) { valueA = valueA.replaceFirst("00", " "); } if (valueB.matches("00.*")) { valueB = valueB.replaceFirst("00", " "); } System.out.println(valueA); // 9000(半角スペース2個) System.out.println(valueB); //900012
投稿2019/10/03 04:41
総合スコア419
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/03 09:18