1

输出很好,我假设输入是“nice”并且格式为 x/y,没有空格,并且只有整数值:

run:
272/273
matching group 1
272
273
matching group 2
BUILD SUCCESSFUL (total time: 0 seconds)

代码:

package stackoverflow;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static java.lang.System.out;

public class Ratio {

    private static String line = "272/273";

    public static void main(String[] args) {
        out.println(line);
        ratios(1);
        ratios(2);
    }

    private static void ratios(int numeratorDenominator) {
        out.println("matching group " + numeratorDenominator);
        Pattern pattern = Pattern.compile("(\\w+)");
        Matcher matcher;
        matcher = pattern.matcher(line);
        while (matcher.find()) {
            try {
                out.println(matcher.group(numeratorDenominator));
            } catch (IndexOutOfBoundsException obe) {
            }
        }
    }
}

但是,它并不完全符合标准。有没有不同的或更好的方法来获得分母?我不是在寻找一些晦涩的正则表达式,但是,例如,要锚定到行尾,获取最后一个单词而不是第一个单词?

就我的目的而言,word 可以正常工作,尽管数字也可以。/d 我想。

4

3 回答 3

3

因为我们假设输入很好:

String regex = "/(\\d+)$"

/匹配/
(\\d+)是一个捕获组,用于/
$表示字符串结尾之后的 1 个或多个数字。

于 2013-12-18T13:27:36.140 回答
2

尝试split()

String line = "272/273";
String num  = line.split("/")[0];
String den  = line.split("/")[1]; 
于 2013-12-18T13:34:01.593 回答
0

这更接近我的目标:

package regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static java.lang.System.out;

public class Ratios {

    private static String line = "272/273";
    private static String denominator, numerator;

    public static void main(String[] args) {
        out.println(line);
        denominator = ratios(1);
        numerator = ratios(2);
        out.println(denominator);
        out.println(numerator);
    }

    private static String ratios(int numeratorDenominator) {
        Pattern pattern = Pattern.compile("(\\d+)\\/(\\d+)");
        Matcher matcher;
        matcher = pattern.matcher(line);
        String result = null;
        while (matcher.find()) {
            try {
                result =matcher.group(numeratorDenominator);
            } catch (IndexOutOfBoundsException obe) {
            }
        }
        return result;
    }
}

替代品表示赞赏。

于 2013-12-18T14:35:10.633 回答