从Java中的String中挑出括号

时间:2013-08-27 01:58:12

标签: java string parentheses charat

我是Java新手并尝试完成一个程序,该程序将读取用户的声明并扫描以查看LEFT括号的数量是否与RIGHT匹配。启动该程序的人创建了一个堆栈,但从未使用它,所以我不理会它,因为我对堆栈不是很好。但是,我能够创建一个循环来遍历String中的每个字符以找到括号,比较它们,然后打印出它们是否是偶数。但是我遇到了通过String查找所有括号的while循环的问题。它由于某种原因不起作用,我不明白为什么。任何有关如何使这项工作的解释将不胜感激。

import java.util.*
public class ParenMatch
       {
public static void main (String[] args)
    {
Stack s = new Stack();
String line; // the string of characters to be checked
Scanner scan = new Scanner(System.in);
System.out.println ("\nParenthesis Matching");
System.out.print ("Enter a parenthesized expression: ");
line = scan.nextLine();

char parenline[] = new char[line.length()];

int x;
while(x < parenline.length) {
parenline[x] = line.charAt(x); 
        x++; 
    }
 int l,r,i,morel,morer = 0; 
while (i > parenline.length) {
        if (parenline[i] == "(" )
            l++;
        if (line.charAt(i) == ")") 
            r++; 
        i++;
    }

    if (l > r) {
        morel = l-r;  
        System.out.println("There are " +morel+ " more left parentheses than    right"); 
    }

    if (r > l) {
        morer = r-l; 
        System.out.println("There are " +morer+ " more right parentheses then left"); 
    }
    if (r == l) {
        System.out.println("The amount of left and right parentheses are even."); 
    }
}

}

3 个答案:

答案 0 :(得分:0)

例如,您需要初始化x。

int x = 0;

您无法增加未初始化的变量。 另外要定义parenline而不是循环并在字符串中的位置添加char只使用其中一个字符串本机方法:

char parenline[] = line.toCharArray();

很抱歉,如果我解释得很严重。

答案 1 :(得分:0)

你有以下错误:

  1. 未初始化
  2. 使用双引号而不是单引号
  3. 检查我是否比parenline.length更好
  4. 这是正确的代码块:

    int x=0;
    ...
    
    int l,r,i,morel,morer;
    l=r=i=morel=morer= 0; 
    while (i < parenline.length) {
        if (parenline[i] == '(' )
            l++;
        if (line.charAt(i) == ')') 
            r++; 
        i++;
    }
    

答案 2 :(得分:0)

我对您的代码进行了一些更改,它运行正常。 但是,使用Stack的方法更好,因为您不仅可以查看括号的大小是否相等,还可以查看表达式是否正确。例如,如果您有类似的东西:(x + y))+(x-(y + x)那么您的程序无法判断这是一个不正确的表达式,因为开括号和右括号的数量相等。 / p>

import java.util.*;
public class Stackpr {
    public static void main (String[] args)
    {
    String line; // the string of characters to be checked
    Scanner scan = new Scanner(System.in);
    System.out.println ("\nParenthesis Matching");
    System.out.print ("Enter a parenthesized expression: ");
    line = scan.nextLine();
    int l = 0;
    int r = 0;
    for (int i = 0; i < line.length(); i++){
    if (line.charAt(i) == '(')
        l++;
    else if (line.charAt(i) == ')')
        r++;
        }
    if (l > r) 
    System.out.println("There are " + (l-r) + " more left parentheses than right");
    else if (l < r)
    System.out.println("There are " + (r - l)+ " more right parentheses then left");
    else 
    System.out.println("The amount of left and right parentheses are even.");

}

}