Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解析指数多项式_Java_Regex_Split - Fatal编程技术网

Java 如何解析指数多项式

Java 如何解析指数多项式,java,regex,split,Java,Regex,Split,如果给定一个字符串,例如“(-2)x^(-2)+(3)x^(1)-(18)x^(-45)”我将如何使用split()获取指数?所以这个例子将返回[-2,1,-45]。我试图弄清楚正则表达式的符号,但它相当混乱。最接近我的是string.split(“x\\^\\(”),但它并没有按照我的意愿完全拆分它。试试看 String str = "(-2)x^(-2)+(3)x^(1)-(18)x^(-45)"; char[] chars = str.toCharArray(); List<Stri

如果给定一个字符串,例如
“(-2)x^(-2)+(3)x^(1)-(18)x^(-45)”
我将如何使用split()获取指数?所以这个例子将返回
[-2,1,-45]
。我试图弄清楚正则表达式的符号,但它相当混乱。最接近我的是
string.split(“x\\^\\(”)
,但它并没有按照我的意愿完全拆分它。

试试看

String str = "(-2)x^(-2)+(3)x^(1)-(18)x^(-45)";
char[] chars = str.toCharArray();
List<String> exponents = new ArrayList<String>();
for(int i=0; i<chars.length; i++) {
    if(chars[i] == '^') {
        if(++i<chars.length && chars[i] == '(') {
            StringBuilder sb = new StringBuilder();
            while(++i<chars.length && chars[i] != ')') {
                sb.append(chars[i]);
            }
            exponents.add(sb.toString());
        }
    }
}
String str=“-2)x^(-2)+(3)x^(1)-(18)x^(-45)”;
char[]chars=str.toCharArray();
列表指数=新的ArrayList();
对于(inti=0;i试试看

String str = "(-2)x^(-2)+(3)x^(1)-(18)x^(-45)";
char[] chars = str.toCharArray();
List<String> exponents = new ArrayList<String>();
for(int i=0; i<chars.length; i++) {
    if(chars[i] == '^') {
        if(++i<chars.length && chars[i] == '(') {
            StringBuilder sb = new StringBuilder();
            while(++i<chars.length && chars[i] != ')') {
                sb.append(chars[i]);
            }
            exponents.add(sb.toString());
        }
    }
}
String str=“-2)x^(-2)+(3)x^(1)-(18)x^(-45)”;
char[]chars=str.toCharArray();
列表指数=新的ArrayList();

对于(int i=0;i如果需要基于正则表达式的解决方案,请尝试以下方法:

    String line = "(-2)x^(-2)+(3)x^(1)-(18)x^(-45)";         
    String pattern = ".*?\\^\\(([\\d-]+)\\)[\\+-]*";
    Pattern r = Pattern.compile(pattern,Pattern.MULTILINE);

    Matcher m = r.matcher(line);
    while (m.find()) {            
        System.out.println("Found value: " + m.group(1));            
    } 

如果需要基于正则表达式的解决方案,请尝试以下方法:

    String line = "(-2)x^(-2)+(3)x^(1)-(18)x^(-45)";         
    String pattern = ".*?\\^\\(([\\d-]+)\\)[\\+-]*";
    Pattern r = Pattern.compile(pattern,Pattern.MULTILINE);

    Matcher m = r.matcher(line);
    while (m.find()) {            
        System.out.println("Found value: " + m.group(1));            
    } 

这不是一个很好的
split
用例。设置一个正则表达式匹配器并在循环中使用
find
。你不会。你会为自己编写一个合适的词法分析器。XY问题。我该如何设置正则表达式匹配器?这不是
split
的好用例。设置一个正则表达式匹配器并在循环中使用
find
。你会不需要。你应该为自己编写一个合适的词法分析器。XY问题。我如何设置正则表达式匹配器?有效时(一眼就能看到),这可以用正则表达式来实现,正如@ajbAgreed所提到的,总是有一些折衷。我通常不喜欢使用正则表达式,因为它们对调试IMO很糟糕,但这是我的首选。此外,如果速度重要的话,这比正则表达式版本要快得多。虽然有效(一目了然),这可以用正则表达式来实现,正如@ajbAgreed所提到的,总是会有一些折衷。我通常不喜欢使用正则表达式,因为它们对调试IMO来说很糟糕,但这是我的首选。此外,如果速度重要的话,这比正则表达式版本要快得多。