Java获取括号中的字符串

在Java编程中,有时候我们需要从一个字符串中提取出括号中的内容。这在处理文本解析、正则表达式匹配等场景中非常常见。本文将介绍几种常用的方法来实现这个功能,并给出相应的代码示例。

1. 使用正则表达式

正则表达式是一种强大的字符串匹配工具,可以用来方便地从字符串中提取符合特定规则的内容。在这里,我们可以使用正则表达式来匹配括号中的内容。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
    public static void main(String[] args) {
        String input = "This is a (test) string";
        Pattern pattern = Pattern.compile("\\((.*?)\\)");
        Matcher matcher = pattern.matcher(input);

        while (matcher.find()) {
            String match = matcher.group(1);
            System.out.println(match);
        }
    }
}

在上述代码中,我们首先定义了一个字符串 input ,它包含了括号中的内容。然后我们使用 Pattern.compile() 方法创建了一个正则表达式对象,该表达式用于匹配括号中的内容。接下来,我们创建了一个 Matcher 对象,并使用 matcher.find() 方法进行匹配。最后,我们使用 matcher.group(1) 方法获取到匹配到的内容,并打印出来。

2. 使用栈

栈是一种后进先出(LIFO)的数据结构,可以用来解决括号匹配的问题。我们可以使用栈来存储左括号,然后遇到右括号时弹出栈顶元素,从而获取到括号中的内容。

import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        String input = "This is a (test) string";
        Stack<Character> stack = new Stack<>();

        for (char c : input.toCharArray()) {
            if (c == '(') {
                stack.push(c);
            } else if (c == ')') {
                StringBuilder sb = new StringBuilder();
                while (!stack.isEmpty() && stack.peek() != '(') {
                    sb.insert(0, stack.pop());
                }
                if (!stack.isEmpty()) {
                    stack.pop(); // 弹出左括号
                    System.out.println(sb.toString());
                }
            }
        }
    }
}

在上述代码中,我们首先定义了一个字符串 input ,它包含了括号中的内容。然后我们创建了一个 Stack 对象,用于存储左括号。接下来,我们遍历字符串中的每个字符,当遇到左括号时,将其入栈;当遇到右括号时,我们将栈中的字符依次弹出,直到遇到左括号,并将弹出的字符拼接成一个字符串,最后打印出来。

3. 使用自定义方法

除了以上介绍的方法,我们还可以自定义方法来获取括号中的字符串。下面是一个示例代码:

public class CustomMethodExample {
    public static void main(String[] args) {
        String input = "This is a (test) string";

        String result = getStringInBrackets(input);
        System.out.println(result);
    }

    private static String getStringInBrackets(String input) {
        int startIndex = input.indexOf('(');
        if (startIndex == -1) {
            return null;
        }

        int endIndex = input.indexOf(')', startIndex);
        if (endIndex == -1) {
            return null;
        }

        return input.substring(startIndex + 1, endIndex);
    }
}

在上述代码中,我们定义了一个名为 getStringInBrackets 的方法,该方法接收一个字符串作为参数,并返回括号中的字符串。我们首先使用 indexOf() 方法找到第一个左括号的索引,然后使用 indexOf() 方法找到右括号的索引,并指定起始位置为左括号的索引。最后,我们使用 substring() 方法来截取括号中的字符串,并返回它。

类图

下面是代码示例中的三个类的类图:

classDiagram
    class RegexExample{
        +main(String[] args)
    }
    class StackExample{
        +main(String[] args)
    }
    class CustomMethodExample{
        +main(String[] args)
        -getStringInBrackets(String input