私はいくつかの数式を含むテキストファイルを持っています。 正規表現を使用してテキストをコンポーネント(単語、文、句読点、数字、算術記号)に解析し、数式を計算し、計算された数式で元の形式でテキストを返す必要があります。 私はこれを正規表現なしで(計算なしで)行いました。今私は正規表現を使用してこれをしようとしています。 これを正しく行う方法を完全に理解していません。入力テキストは次のようになります。txtファイルからのJava正規表現の入力
ピートは数学5 + 3とジェシカもsin(3)です。私は必要な出力で
:
ピート数学8とjesicaあまりにも0.14のように。
これを行う方法を知っている人からの正規表現と計算の助言が必要です。
マイコード:
final static Pattern PUNCTUATION = Pattern.compile("([\\s.,!?;:]){1,}");
final static Pattern LETTER = Pattern.compile("([а-яА-Яa-zA-Z&&[^sin]]){1,}");
List<Sentence> sentences = new ArrayList<Sentence>();
List<PartOfSentence> parts = new ArrayList<PartOfSentence>();
StringTokenizer st = new StringTokenizer(text, " \t\n\r:;.!?,/\\|\"\'",
true);
正規表現を使用してコード(動作しない):
while (st.hasMoreTokens()) {
String s = st.nextToken().trim();
int size = s.length();
for (int i=0; i<s.length();i++){
//with regex. not working variant
Matcher m = LETTER.matcher(s);
if (m.matches()){
parts.add(new Word(s.toCharArray()));
}
m = PUNCTUATION.matcher(s);
if (m.matches()){
parts.add(new Punctuation(s.charAt(0)));
}
Sentence buf = new Sentence(parts);
if (buf.getWords().size() != 0) {
sentences.add(buf);
parts = new ArrayList<PartOfSentence>();
} else
parts.add(new Punctuation(s.charAt(0)));
正規表現なし(作業):
if (size < 1)
continue;
if (size == 1) {
switch (s.charAt(0)) {
case ' ':
continue;
case ',':
case ';':
case ':':
case '\'':
case '\"':
parts.add(new Punctuation(s.charAt(0)));
break;
case '.':
case '?':
case '!':
parts.add(new Punctuation(s.charAt(0)));
Sentence buf = new Sentence(parts);
if (buf.getWords().size() != 0) {
sentences.add(buf);
parts = new ArrayList<PartOfSentence>();
} else
parts.add(new Punctuation(s.charAt(0)));
break;
default:
parts.add(new Word(s.toCharArray()));
}
} else {
parts.add(new Word(s.toCharArray()));
}
}
hey!答えてくれてありがとう。私は自分のプロジェクトでreduceメソッドをreallizeする方法を完全には理解していません。あなたは私に少しの例を教えてもらえますか? –
文字列 '3 + 4'を与えて式を評価し、' 7'を返すライブラリが数多くあります。私はexp4jのライブラリの1つを使って答えを更新しました。 'reduce'では、個々の式を評価する方法を実装することができます –
ありがとう!クールなライブラリ、このように、すべてが動作しています。 –