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

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

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

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

Q&A

4回答

1051閲覧

stringの配列の値からbyte値で表せれる整数を抽出する方法

krs.na

総合スコア12

Java

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

0グッド

0クリップ

投稿2018/10/22 13:38

Javaでstringの配列からbyte値で表せれる整数を全て抽出するやり方が分からなくて悩んでいます。
正規表現を使うのかと思いますがどう書けばいいでしょうか?


配列
"101" "ajt" "あああ" "121"
byte値を抽出
101 121

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

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

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

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

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

fuzzball

2018/10/23 07:58

例えば "0x10" という文字列は抽出するのでしょうか?
guest

回答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

swordone

総合スコア20651

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

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

jun68ykt

2018/10/22 21:00

最近のJAVAではこのように書けるのですね。勉強になりました。
swordone

2018/10/23 08:07

感覚としてはIntStreamよりもOptionalIntを使いたいけど、Java10でないとflatMapが美しくならないので…。
guest

0

byte値で表せる、とは10進数のはなしでしょうか。
その場合に、256以上の数値が存在する場合はどのように処理すべきでしょうか

投稿2018/10/22 16:07

y_waiwai

総合スコア87774

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

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

A-pZ

2018/10/23 07:45

byte は -128~127では。
guest

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に上げました。

一番左の[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]))$

以下は、上記の正規表現にマッチする文字列を判定するコード例です。

投稿2018/10/22 14:03

編集2018/10/22 14:38
jun68ykt

総合スコア9058

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

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

0

正規表現で書くことも可能ですが、わりあい面倒です。

二段階に分けて考えれば書きやすいです。
0. 数字だけで構成された文字列を選び出す
0. それらを数値化し、範囲を判定する

投稿2018/10/22 13:47

LouiS0616

総合スコア35660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問