2016-09-03 17 views
1

JTextAreaに入力された文字列が数字かどうかを確認するプログラムの一部を作成しています。方法は、文字列全体が数字を含んでいるわけではなく、数字が何桁であるかわからない)。私はすでにJTextAreaから文字列を取得する方法と、文字列に数値が含まれているかどうかをチェックする方法を知っています。しかし、私はどのように文字列から正確な番号を取得するのか分からない。不明なサイズの文字列から番号を取得する方法(Java)

//no problems with this method, it's just here for reference. 
public static boolean isNum(char[] c, int index){ 
    //I want to include numbers 0-9 
    for(int i = 0; i < 10; i++){ 
     if(c[index].equals(i(char)) || c[index].equals('.')){ 
     return true; 
     } 
    } 
    //if the character is not a number 0-9, it is not a number, thus returning false. 
    return false; 
} 

と::

//I need a string parameter to make it easier to get the text from the JTextArea 
public static float checkNum(String s){ 
    //a List to hold the digits 
    List<Char> digits = new List<Char>(); 
    //a char array so I can loop through the string 
    char[] c = s.toCharArray(); 

    for(int i = 0; i < c.length(); i++){ 
     //if the character is not a number, break the loop 
     if(!isNum(c[i])){ 
      break; 
     } 
     else{ 
      //if the character is a number, add it to the next digit 
      digits.add(c[i]); 
     } 
    } 
//insert code here. 
} 

たぶん私は、その後にそれを変換し、その文字列に変換し、バックchar型の配列にchar型のリストを変換する必要がありますここで私が働いている二つの方法がありますフロート?もしそうなら、どうすればいいのですか?

編集:ありがとう、私は正規表現を見て、私は仕事をするだろうとは思わない。私は番号が不明な桁数を探しています。私は、数字には最後にスペースがあることを知っています(または少なくとも数字以外の値)。

+0

:あなたは数内で小数点を扱うようにしたい場合は

public Integer extractNumber(String fromString){ Matcher matcher = Pattern.compile("\\D*(\\d+)\\D*").matcher(fromString); return (matcher.matches()) ? new Integer(matcher.group(1)) : null; } 

、あなたがする方法を変更できますか? 'BigInteger'か' BigDecimal'のどちらかを使うと問題は解決するでしょうが、明確にするためにどこから値を抽出していますか?あなたはあなたの文字列全体が数字ではないかもしれないと言っています(非数字を解析することができるのでうまくいきます)が、使用しようとしている2つのメソッドを見ているだけです。少し難しい。 – Makoto

+0

私は(さまざまなタイプの)方程式内の数字を見つけようとしているので、それらの数字で演算を行うことができます(加算、減算など)。 – MethodHax

答えて

3

正規表現を使用する必要があります。

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

Pattern p = Pattern.compile("\\d+?\\.\\d+"); 
Matcher m = p.matcher(inputString); 

while(m.find()) 
    //do some string stuff 

それとも、これでwhileループを置き換えることによって、数字の1グループと文字列の中で1つの試合のためになります::

String digits = m.group(1); 
double number = Double.valueOf(digits); 

Javaでは、あなたは、このような数字のすべてのインスタンスをループができましたこれがどのように動作するかの詳細については、正規表現を参照してください。このサイトは特に役に立ちますhttps://regexone.com/

+0

あなたのマッチ例は正しくありません。 'String.matches(String expr)'は 'boolean'を返します。 – pczeus

+0

また、' String.numericValueOf'も存在しません。 –

+0

おかげさまで、私がやっていることに合わせて修正すれば、これはうまくいくようです。しかし、今のところコードをテストするものがないので、少しはわかりません。 – MethodHax

0

正規表現を使用して、任意の長さの数をテストして抽出することができます。ここで は、それはまさにそれを行うことを例簡単な方法です:あなたが少しを明確にすることができ

public Double extractNumber(String fromString){ 
    Matcher matcher = Pattern.compile("\\D*(\\d+\\.?\\d+)\\D*").matcher(fromString); 
    return (matcher.matches()) ? new Double(matcher.group(1)) : null; 
} 
関連する問題