次のような式を表す文字列入力があります。
BMI = ( Weight / ( Height * Height ) ) * 703
すべての正当な変数を抽出できるようにしたいString[]
有効な変数は、英数字のみが許可されることを除いて、Java 変数の命名規則とほぼ同じ規則で決定されます。
- 大文字または小文字の任意のアルファベット文字の後に数字が続く場合があります
- 任意の単語/テキスト
- 任意の単語/テキストの後に数字が続く
したがって、出力は次のようになると思います。
BMI
Weight
Height
これは私の現在の試みです:
/* helper method , find all variables in expression,
* Variables are defined a alphabetical characters a to z, or any word , variables cannot have numbers at the beginning
* using regex pattern "[A-Za-z0-9\\s]"
*/
public static List<String> variablesArray (String expression)
{
List<String> varList = null;
StringBuilder sb = null;
if (expression!=null)
{
sb = new StringBuilder();
//list that will contain encountered words,numbers, and white space
varList = new ArrayList<String>();
Pattern p = Pattern.compile("[A-Za-z0-9\\s]");
Matcher m = p.matcher(expression);
//while matches are found
while (m.find())
{
//add words/variables found in the expression
sb.append(m.group());
}//end while
//split the expression based on white space
String [] splitExpression = sb.toString().split("\\s");
for (int i=0; i<splitExpression.length; i++)
{
varList.add(splitExpression[i]);
}
}
return varList;
}
結果は私が期待したものではありません。余分な空行を取得し、「高さ」を 2 回取得しましたが、数値を取得するべきではありませんでした:
BMI
Weight
Height
Height
703