gpt4 book ai didi

java - 检查字符是否匹配可接受字符列表

转载 作者:行者123 更新时间:2023-12-01 18:42:30 24 4
gpt4 key购买 nike

我正在编写一个进行分隔符检查的程序。当用户输入诸如

之类的表达式时
12+{2*[3*(24+45)+5]}

我需要检查分隔符是否匹配(有点像 java 编译器在表达式中检查的内容)。

我知道这可以通过大量 if/else if 语句来完成,但我记得对字符串使用正则表达式,例如:

if(s.matches("[abc]+")
System.out.print(s);

但这对角色不起作用。如果我能写一个类似于上面的表达式,那就太好了:

for(byte i = 0; i < aString.length(); i++)
{
if(aString.charAt(i).matches("[({[]})]+") // maybe '[]' is a problem
stack.push(aString.charAt(i));
}

字符存在这样的方法吗?我能做什么?

最佳答案

我想说一个解决方案是使用 Stack并从每个输入字符串开始。

  1. 当找到开括号{, [, (]时,将其插入到堆栈中。
  2. 当找到右括号 }、]、) 时,将其从堆栈中弹出
  3. 使用 if 语句进行比较,看看是否有匹配项。如果不这样做,则返回 false

完成搜索后,检查堆栈是否为空,然后返回 truefalse

Stack Example: Delimiter Matching

如果缺少分隔符匹配,此使用 Stack 的示例将仅返回 false

import java.util.Stack;

class BracketChecker {
private String input;

public BracketChecker(String in) {
input = in;
}

public void check() {
Stack<Character> theStack = new Stack<Character>();

for (int j = 0; j < input.length(); j++) {
char ch = input.charAt(j);
switch (ch) {
case '{':
case '[':
case '(':
theStack.push(ch);
break;
case '}':
case ']':
case ')':
if (!theStack.isEmpty()) {
char chx = theStack.pop();
if ((ch == '}' && chx != '{') ||
(ch == ']' && chx != '[') ||
(ch == ')' && chx != '('))
System.out.println("Error: " + ch + " at " + j);
} else
System.out.println("Error: " + ch + " at " + j);
break;
default:
break;
}
}
if (!theStack.isEmpty()){
System.out.println("Error: missing right delimiter");
}
}
}

class delimTest {
public static void main(String[] args) {

String input = "12+{2*[3*(24+45)+5}";

BracketChecker theChecker = new BracketChecker(input);
theChecker.check();
}
}

关于java - 检查字符是否匹配可接受字符列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19351562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com