簡體   English   中英

如何在轉換為字符串的 Java 程序中找到字符串?

[英]How can I find a String within a Java program converted to a string?

基本上,我將一個 java 程序作為字符串讀入我的程序,我正在嘗試找到一種方法從中提取字符串。 我有一個循環計算這個程序的每個字符,這就是當它到達 '"' 時發生的情況。

else if (ch == '"')
            {
                String subString = " ";
                index ++;

                if (ch != '"')
                {
                    subString += ch;
                }

                else
                {
                    System.out.println(lineNumber + ", " + TokenType.STRING + ", " + subString);
                    index ++;
                    continue;
                }

不幸的是,這不起作用。 這是我試圖輸出子字符串的方式。

本質上,我正在尋找一種將兩個 " 之間的所有字符添加在一起以獲得字符串的方法。

您可以使用正則表達式:

Pattern regex = Pattern.compile("(?:(?!<')\"(.*?(?<!\\\\)(?:\\\\\\\\)*)\")");
Matcher m = regex.matcher(content);
while (m.find())
    System.out.println(m.group(1));

這將捕獲帶引號的字符串,並考慮轉義的引號/反斜杠。

分解模式:

  1. (?: ... ) = 不要作為一組捕獲(而是捕獲內部)
  2. (?!<') = 確保之前沒有單引號(以避免 '"')
  3. \\"( ... )\\" = 捕獲引號內的內容
  4. .*? = 匹配任何字符的最小字符串
  5. (?<!\\\\\\\\) = 之前不匹配單個反斜杠(雙轉義 = 內容中的單個反斜杠)
  6. (?\\\\\\\\\\\\\\\\)* = 匹配 0 個或偶數個反斜杠

總之,5. & 6. 只匹配引號前的偶數個反斜杠。 這允許像\\\\"\\\\\\\\"類的字符串結尾,但不能使用\\"\\\\\\" ,這將是字符串的一部分。

非正則表達式解決方案,也處理轉義引號:

List<String> strings = new ArrayList<>();
int start = -1;
int backslashes = 0;
for (int i = 0; i < content.length(); i++) {
    char ch = content.charAt(i);
    if (ch == '"') {
        if (start == -1) {
            start = i + 1;
            backslashes = 0;
        } else if (backslashes % 2 == 1) {
            backslashes = 0;
        } else {
            strings.add(content.substring(start, i));
            start = -1;
        }
    } else if (ch == '\\') backslashes++;
}
strings.forEach(System.out::println);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM