Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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_String_Balance - Fatal编程技术网

Java 如何构造正则表达式来平衡字符串中的字符?

Java 如何构造正则表达式来平衡字符串中的字符?,java,regex,string,balance,Java,Regex,String,Balance,我遇到过不同问题的正则表达式,但我找不到正则表达式来平衡字符串中的字符 我遇到了一个问题,想知道字符串是否平衡。 例如:aabbccdd是一个平衡的字符,因为字符以偶数重复 但是aabbccddd不是一个平衡的,因为ddd以奇数模式重复。这适用于输入非特定a、b、c和d的所有字符。如果输入为12344321或123454321,则应分别返回平衡和不平衡结果 如何使用正则表达式找到余额。我们应该使用什么类型的正则表达式来确定字符串是否平衡 Edit: 我试图只使用正则表达式来寻找解决方案,因为问

我遇到过不同问题的正则表达式,但我找不到正则表达式来平衡字符串中的字符

我遇到了一个问题,想知道字符串是否平衡。 例如:
aabbccdd
是一个平衡的字符,因为字符以偶数重复 但是
aabbccddd
不是一个平衡的,因为
ddd
以奇数模式重复。这适用于输入非特定
a、b、c和d的所有字符。如果输入为
12344321
123454321
,则应分别返回平衡和不平衡结果

如何使用正则表达式找到余额。我们应该使用什么类型的正则表达式来确定字符串是否平衡

Edit:

我试图只使用正则表达式来寻找解决方案,因为问题需要用正则表达式模式来回答。如果没有明确提到regex,我将使用任何其他解决方案来实现

我认为您无法使用regex实现。为什么需要使用它们? 我试过这个:它很有效而且很简单

static boolean isBalanced(String str) {
    ArrayList<Character> odds = new ArrayList<>(); //Will contain the characters read until now an odd number of times
    for (char x : str.toCharArray()) { //Reads each char of the string
        if (odds.contains(x)) { //If x was in the arraylist we found x an even number of times so let's remove it
            odds.remove(odds.indexOf(x));
        }
        else {
            odds.add(x);
        }
    }
    return odds.isEmpty();
}
静态布尔值是平衡的(字符串str){
ArrayList Lobbits=new ArrayList();//将包含迄今为止读取次数为奇数的字符
for(char x:str.toCharArray()){//读取字符串的每个字符
如果(赔率.contains(x)){//如果x在arraylist中,我们发现x的次数为偶数,那么让我们删除它
赔率移除(赔率指数x);
}
否则{
赔率。加(x);
}
}
返回赔率;
}

我认为你不能用正则表达式。为什么需要使用它们? 我试过这个:它很有效而且很简单

static boolean isBalanced(String str) {
    ArrayList<Character> odds = new ArrayList<>(); //Will contain the characters read until now an odd number of times
    for (char x : str.toCharArray()) { //Reads each char of the string
        if (odds.contains(x)) { //If x was in the arraylist we found x an even number of times so let's remove it
            odds.remove(odds.indexOf(x));
        }
        else {
            odds.add(x);
        }
    }
    return odds.isEmpty();
}
静态布尔值是平衡的(字符串str){
ArrayList Lobbits=new ArrayList();//将包含迄今为止读取次数为奇数的字符
for(char x:str.toCharArray()){//读取字符串的每个字符
如果(赔率.contains(x)){//如果x在arraylist中,我们发现x的次数为偶数,那么让我们删除它
赔率移除(赔率指数x);
}
否则{
赔率。加(x);
}
}
返回赔率;
}

此问题的正则表达式存在,但不会加快任何速度,而且会非常混乱。更容易准备NFA,然后切换到REGEX。不过,这不是合适的工具

public static void main(String args[]) {
    String s = args[0];
    int[] counter = new int[256];
    for (int i = 0; i < s.length(); i++) {
        counter[s.charAt(i)]++;
    }
    if (validate(counter)) {
        System.out.println("valid");
    } else {
        System.out.println("invalid");
    }
}

public static boolean validate(int[] tab) {
    for (int i : tab) {
        if (i%2 == 1) {
            return false;
        }
    }
    return true;
}
publicstaticvoidmain(字符串参数[]){
字符串s=args[0];
int[]计数器=新的int[256];
对于(int i=0;i
编辑:用于指向正则表达式存在

仅用于两个字符的有限字符的参考。从最左边开始,打双圈赢。到目前为止具有奇数计数的字符集命名的每个状态


这个问题的正则表达式存在,但不会加快任何速度,而且会非常混乱。更容易准备NFA,然后切换到REGEX。不过,这不是合适的工具

public static void main(String args[]) {
    String s = args[0];
    int[] counter = new int[256];
    for (int i = 0; i < s.length(); i++) {
        counter[s.charAt(i)]++;
    }
    if (validate(counter)) {
        System.out.println("valid");
    } else {
        System.out.println("invalid");
    }
}

public static boolean validate(int[] tab) {
    for (int i : tab) {
        if (i%2 == 1) {
            return false;
        }
    }
    return true;
}
publicstaticvoidmain(字符串参数[]){
字符串s=args[0];
int[]计数器=新的int[256];
对于(int i=0;i
编辑:用于指向正则表达式存在

仅用于两个字符的有限字符的参考。从最左边开始,打双圈赢。到目前为止具有奇数计数的字符集命名的每个状态


为什么需要正则表达式呢?我从来都不喜欢java,但是在阅读了所有的答案和评论之后——我知道——我再也不会转向java了。在python中,这个问题是大约2-5行没有正则表达式和特定库的代码。。。仍然不能相信你不能在java中计算字符串中的字符。。。事实上,答案是:,现在只比较字符串中每个字符的计数。。。它实际上是一行的expected@Drako请记住OP要求基于RegExps的解决方案(我实际上怀疑这是一个考试技巧问题)。关于Java,它最近经历了一些发展,然后是Groovy和Kotlin,它们通过添加Python自古以来提供的所有语法糖而抢走了Java的风头。@classstacker您可能对这一点是正确的,因为我在这里看到了regex标记,并且发现即使可以编写它,也不需要regex,在python中不使用lambdas,这将进一步缩短它,工作示例有3-4行:)我相信只需几行就可以在Java中实现同样的效果:)所以这确实是regex折磨的学校问题:)@classstacker这是检查学生是否知道如何从DFA或NFA转换为regex的完美任务。对我来说,如果提供了转换算法,DFA就足够了。为什么需要正则表达式呢?我从来都不喜欢java,但在阅读了所有的答案和评论之后——我知道——我再也不会切换到java了。在python中,这个问题是大约2-5行没有正则表达式和特定库的代码。。。仍然不能相信你不能在java中计算字符串中的字符。。。事实上,答案是:,现在只比较字符串中每个字符的计数。。。它实际上是一行的expected@Drako请记住OP要求基于RegExps的解决方案(我实际上怀疑这是一个考试技巧问题)。关于Java,它最近经历了一些发展,然后是Groovy和Kotlin,w