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

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

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

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

Q&A

解決済

3回答

1070閲覧

Javaで文字列から特定の記号の中身だけ取り出す方法を知りたい

umino

総合スコア54

Java

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

0グッド

0クリップ

投稿2020/03/25 04:55

前提・実現したいこと

下記、変数targetStrに格納した文字列から192.168.1.101だけを取得し、変数ipAddrに格納したいです。

Java

1String targetStr = "testip='192.168.1.101'wheretestname='testname'" 2ipAddr = targetStr.substring(targetStr.indexOf("'") + 1, targetStr.lastIndexOf("'")).trim(); 3 4// ipAddr 5// 理想)192.168.1.101 6// 実際)192.168.1.101'wheretestname='testname

元のステートメントを大幅に変えずに期待した結果を得るには、どのように書けばよいでしょうか。
ipAddr = targetStr.substring(targetStr.indexOf("'") + 1, targetStr.lastIndexOf("'")).trim();
のindexOfとlastIndexOfをいじったのですが、思うような出力を得られませんでした。
お詳しい方、ご教示いただけますと幸いです。
よろしくおねがいします。

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

Java7

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

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

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

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

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

guest

回答3

0

ベストアンサー

'で挟まれた文字列、つまり**'と、その次の'の位置**が必要なわけです。なのでその位置を探します。

java

1int start = targerStr.indexOf("'") + 1; 2int end = targerStr.indexOf("'", start); 3ipAddr = targetStr.substring(start, end).trim();

indexOfに第2引数を与えると、その位置以降から探します。

投稿2020/03/25 05:09

swordone

総合スコア20651

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

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

umino

2020/03/25 06:54

swordoneさん さっそくのご回答ありがとうございます。 実際のコードで試したところ、無事変換できました。 indexOfに第2引数を与えて、以降から検索するんですね。 すぐにご回答いただけて大変助かりました、 ありがとうございました。
guest

0

Java

1 String targetStr = "testip='192.168.1.101'wheretestname='testname'"; 2 String ipAddr = targetStr.replaceAll("[^0-9.]", "");

この場合はうまく行きますが、...

もう少しましなものは、

Java

1 String targetStr = "testip='192.168.1.101'wheretestname='testname'"; 2 String ipAddr = targetStr.split("'")[1];

こんなのも考えられます。

Java

1 String targetStr = "testip='192.168.1.101'wheretestname='testname'"; 2 String ipAddr = targetStr.replaceFirst("[^']*'", "").replaceFirst("'.*", ""); 3 } 4}

投稿2020/03/25 09:14

編集2020/03/25 11:54
kazuma-s

総合スコア8224

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

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

umino

2020/03/26 04:46

kazuma-sさん ご回答ありがとうございます。 なるほど、正規表現でreplaceする方法もあるのですね。 次回、参考にさせていただきます。 丁寧なご回答、ありがとうございました。
guest

0

これだと「大幅に変え」たことになるということでしょうか.

java

1 String targetStr = "testip='192.168.1.101'wheretestname='testname'"; 2 Matcher m = Pattern.compile("testip='(\d+\.\d+\.\d+\.\d+)'").matcher(targetStr); 3 if(m.find()) { 4 String ipAddr = m.group(1); 5 System.out.println(ipAddr); 6 } else { 7 System.out.println("not found."); 8 }

始めの ' 以降を取り出し, その文字列から次の ' までを取り出すというテもあります.

java

1 String targetStr = "testip='192.168.1.101'wheretestname='testname'"; 2 String ipAddr = targetStr.substring(targetStr.indexOf("'") + 1); 3 ipAddr = ipAddr.substring(0, ipAddr.indexOf("'")); 4 System.out.println(ipAddr);

投稿2020/03/25 06:56

編集2020/03/25 07:03
jimbe

総合スコア12648

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

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

umino

2020/03/26 04:48

jimbeさん ご回答ありがとうございます。 IPアドレス部分を正規表現でマッチする厳密なやりかたですね。 厳しく抽出したいときはそちらを使わせていただきます。 詳しくご回答いただきまして、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問