如果您能用Java帮助我,我将不胜感激。
给定两个字符串,我们可以说String A = "(A+B)+(C)"
和String B = "((A+B)+(C))"
以及String C = (A+B)
和String D = A+(B+C)
以及String E = (A+(B+C))
如何识别字符串是否完全被字符串B括起来。
例如:boolean flag(String expr) { //return false if surrounded, else true }
如果expr = A
,flag将返回true
如果expr = B
,则flag将返回false
如果expr = C
,则flag将返回false
如果expr = D
,flag将返回true
如果expr = E
,则flag将返回flase
很抱歉,如果不清楚,但它应该适用于任何String表达式:
假设表达式仅包含数字和运算符和括号。
感谢。欣赏它。
答案 0 :(得分:4)
你不能用正则表达式做*因为嵌套括号不是常规语言。
而是迭代字符串并通过计算开括号和右括号的数量来跟踪嵌套级别。对于每个左括号,将一个添加到嵌套级别。对于每个右括号,减去一个。
以下是一些可用于证明原理的实例:
(A+B)+(C)
11110 TRUE
((A+B)+(C))
12222112210 FALSE
(A+B)
11110 FALSE
A+(B+C)
0 TRUE
(A+(B+C))
111222210 FALSE
*三立
答案 1 :(得分:1)
我认为你的情况有两种选择。
示例:
public boolean checkForParanthesis(String str) {
Integer last = str.length() - 1; // Get number of the last character
String firstChar = str.substring(0); // Get first character of the string
String lastChar = str.substring(last); // Get last character of the string
if (firstChar.equals("(") && lastChar.equals(")")) return false;
return true
}
答案 2 :(得分:1)
Mark Byers的算法似乎大致正是您所寻找的。现在把它放在一起,你必须使用for
和if
Java关键字和索引。一个例子可以是以下代码。但是,它不验证表达式,因此在例如时不会引发错误。测试A+B)
无效表达式(只返回true
值)。检查并自己测试。希望这有点帮助...
package test;
public class Main {
public static void main(String[] args) {
Main m = new Main();
m.start();
}
private void start() {
/* true */
System.out.println(isNotSurrounded("A"));
System.out.println(isNotSurrounded("A+B"));
System.out.println(isNotSurrounded("A+(B+C)"));
System.out.println(isNotSurrounded("(B+C)+D"));
System.out.println(isNotSurrounded("A+(B+C)+D"));
System.out.println(isNotSurrounded("(A+B)+(C)"));
System.out.println(isNotSurrounded("(A)+(B)+(C)"));
System.out.println(isNotSurrounded("(A)+((B)+(C))+(D+E+F+(G))"));
/* false */
System.out.println();
System.out.println(isNotSurrounded("(A)"));
System.out.println(isNotSurrounded("(A+B)"));
System.out.println(isNotSurrounded("(A+(B+C))"));
System.out.println(isNotSurrounded("((B+C)+D)"));
System.out.println(isNotSurrounded("(A+(B+C)+D)"));
System.out.println(isNotSurrounded("((A+B)+(C))"));
System.out.println(isNotSurrounded("((A)+(B)+(C))"));
System.out.println(isNotSurrounded("((A)+((B)+(C))+(D+E+F+(G)))"));
}
private boolean isNotSurrounded(String expression) {
if (expression.startsWith("(") && expression.endsWith(")") && expression.length() > 2) {
int p = 0;
for (int i = 1; i < expression.length() - 1; i++) {
if (expression.charAt(i) == '(') {
p++;
} else if (expression.charAt(i) == ')') {
p--;
}
if (p < 0) {
return true;
}
}
if (p == 0) {
return false;
}
}
return true;
}
}
代码输出如下:
true
true
true
true
true
true
true
true
false
false
false
false
false
false
false
false