2017-11-23 11 views
-3

内の文字列からすべてのfloat値を取得するには、私持っている文字列:エントリ、X:0.0、Y:-0.9980941エントリ、X:1.0、Y:-0.9686125エントリ、X:2.0、Y:0.9044667どのようにJavaの

方法?正規表現を介してすべての浮動小数点値を取得する:[ - +] [0-9] 0.0、-0.9980941、1.0、-0.9686125、2.0、0.9044667

+0

https://meta.stackoverflow.com/questions/285733/should-give-me-a-regex-that-does-x-questions - 閉/ – lexicore

答えて

0

これを行うにはjava.util.regexパッケージを使用できます。

正規表現\ dは、数字の&と一致しますが、[0..9]と同じです。 \ d *は、前の式が0回以上出現するのを照合します。 '?'ドットの0回または1回のオカレンスと一致します。 \ d +は前の\ dの1つ以上の式と一致します。したがって、すべて一緒にregExが文字列の[0..9]。[0..9]パターンを検索します。

*、、の違いを知りたい場合はjava_regular_expressionsをご覧ください。 、?そしてregExの+。

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Main { 

    public static void main(String[] args) { 
     String str = "Entry, x: 0.0 y: -0.9980941 Entry, x: 1.0 y: -0.9686125 Entry, x: 2.0 y: 0.9044667"; 
     String regEx = "\\d*\\.?\\d+"; 

     Pattern patternObject = Pattern.compile(regEx);  
     Matcher matcher = patternObject.matcher(str); 

     while (matcher.find()) { 
      System.out.println(matcher.group());   
     } 

    } 
} 
0

.ニーズがエスケープされるので、それがあるよう@Ashishマシューによって提案[-+]?[0-9]*.?[0-9]+パターンは私のために働いていなかったことに注意してください。

また、彼が投稿したリンクを読んで、最終的な作業の解決法とそれが説明とともに作成された方法を見つけることをお勧めします。

これは、それに基づいて自分の作業コードです:

public static void main(String[] args) { 
    String s = " Entry, x: 0.0 y: -0.9980941 Entry, x: 1.0 y: -0.9686125 Entry, x: 2.0 y: 0.9044667"; 
    List<String> allMatches = new ArrayList<>(); 
    Matcher m = Pattern.compile("[-+]?[0-9]+\\.?[0-9]*").matcher(s); 
    while (m.find()) { 
     allMatches.add(m.group()); 
    } 
    // [0.0, -0.9980941, 1.0, -0.9686125, 2.0, 0.9044667] 
    System.out.println(allMatches); 
}