![](/img/trans.png)
[英]How can i find in java program, whether the given string is encrypted string or not?
[英]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));
這將捕獲帶引號的字符串,並考慮轉義的引號/反斜杠。
分解模式:
(?: ... )
= 不要作為一組捕獲(而是捕獲內部)(?!<')
= 確保之前沒有單引號(以避免 '"')\\"( ... )\\"
= 捕獲引號內的內容.*?
= 匹配任何字符的最小字符串(?<!\\\\\\\\)
= 之前不匹配單個反斜杠(雙轉義 = 內容中的單個反斜杠)(?\\\\\\\\\\\\\\\\)*
= 匹配 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.