Javaでstringの配列からbyte値で表せれる整数を全て抽出するやり方が分からなくて悩んでいます。
正規表現を使うのかと思いますがどう書けばいいでしょうか?
例
配列
"101" "ajt" "あああ" "121"
byte値を抽出
101 121
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
jun68yktさんの方針
Byte クラスの parseByte を使って、変換に成功したものだけを拾っていくという方法
をStreamで書くとこんな感じになるかと。
java
1class Main { 2 3 public static void main(String[] args) { 4 int[] filtered = Stream.of("101", "ajt", "あああ", "121") 5 .flatMapToInt(Main::safeParseByte) 6 .toArray(); 7 } 8 9 public static IntStream safeParseByte(String s) { 10 try { 11 return IntStream.of(Byte.parseByte(s)); 12 } catch (NumberFormatException e) { 13 return IntStream.empty(); 14 } 15 } 16 17}
投稿2018/10/22 17:02
総合スコア20651
0
こんにちは。
ちょっとズボラな方法かもしれませんが、Byte クラスの parseByte を使って、変換に成功したものだけを拾っていくという方法もあるかと思います。
以下その一例です。byteValues
に変換に成功した値を追加していき、結果として、[101, 121, -1]
が表示されます。
java
1import java.util.List; 2import java.util.ArrayList; 3 4public class Q153589 { 5 public static void main(String args[]) { 6 7 String[] data = { "101", "ajt", "あああ", "121", "-1", "128" }; 8 List<Byte> byteValues = new ArrayList<>(); 9 10 for (String s: data) { 11 try { 12 byteValues.add(Byte.parseByte(s)); 13 } catch (Exception e) { 14 System.err.println(e.getMessage()); 15 } 16 } 17 18 System.out.println(byteValues); 19 20 } 21}
上記のコードを以下のjdoodleに上げました。
- **動作確認用サンプル: ** https://www.jdoodle.com/a/Kb6
一番左の[Execute]ボタンをクリックすると実行されます。(jdoodleだと日本語の文字列は化けるようです。)
追記
正規表現でやるとすれば、Oreilly Regular Expressions Cookbook の
に載っている、以下を使うのがよいかと思います。
–128 to 127 (signed byte):
^(12[0-7]|1[01][0-9]|[1-9]?[0-9]|-(12[0-8]|1[01][0-9]|[1-9]?[0-9]))$
以下は、上記の正規表現にマッチする文字列を判定するコード例です。
- **動作確認用サンプル: ** https://www.jdoodle.com/a/Kc4
投稿2018/10/22 14:03
編集2018/10/22 14:38総合スコア9058
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。