我有一個帶有標記的字符串,需要使用Java。在字符串中找到特定標記的最佳方法是什麼?
例如。
string = abc<B>def</B>ghi<B>j</B>kl
desired output..
segment [n] = start, end
segment [1] = 4, 6
segment [2] = 10, 10
我有一個帶有標記的字符串,需要使用Java。在字符串中找到特定標記的最佳方法是什麼?
例如。
string = abc<B>def</B>ghi<B>j</B>kl
desired output..
segment [n] = start, end
segment [1] = 4, 6
segment [2] = 10, 10
正則表達式應該爲此工作出色。
請參閱您的JavaDoc
注:StringTokenizer的不你想要什麼,因爲它分裂字符,而不是字符串 - 字符串delim是一個字符的列表,其中任何一個將分裂。對於非常簡單的情況(如明確的逗號分隔列表)非常有用。
當您想要通過特定字符串分隔字符串時,StringTokenizer會爲您提供單獨的標記。 或者您也可以使用String中的split()方法來獲取單獨的字符串。爲了獲得不同的數組,你必須將正則表達式放入。
感謝馬庫斯.. 參考我發現這個.. StringTokenizer是一個遺留類,由於兼容性的原因而被保留,儘管它在新代碼中的使用不受歡迎。建議任何尋求此功能的人使用String或java.util.regex包的拆分方法。 – pro 2009-01-06 10:28:47
StringTokenizer分割*字符*,而不是字符串 - 字符串delim是一個字符列表,其中任何一個字符都會被分割。對於非常簡單的情況(如明確的逗號分隔列表)非常有用。 – 2009-01-06 10:43:43
StringTokenizer將整個字符串作爲參數,對於大字符串並不是一個好主意。 您還可以使用StreamTokenizer
您還需要查看Scanner。
鑑於你的例子,我想我會使用正則表達式,特別是我會看看Matcher提供的分組功能。
湯姆
String inputString = "abc<B>def</B>ghi<B>j</B>kl";
String stringPattern = "(<B>)([a-zA-Z]+)(<\\/B>)";
Pattern pattern = Pattern.compile(stringPattern);
Matcher matcher = pattern.matcher(inputString);
if (matcher.matches()) {
String firstGroup = matcher.group(1);
String secondGroup = matcher.group(2);
String thirdGroup = matcher.group(3);
}
這是一個有點「蠻力」,並做了一些假設,但這個工程。
public class SegmentFinder
{
public static void main(String[] args)
{
String string = "abc<B>def</B>ghi<B>j</B>kl";
String startRegExp = "<B>";
String endRegExp = "</B>";
int segmentCounter = 0;
int currentPos = 0;
String[] array = string.split(startRegExp);
for (int i = 0; i < array.length; i++)
{
if (i > 0) // Ignore the first one
{
segmentCounter++;
//this assumes that every start will have exactly one end
String[] array2 = array[i].split(endRegExp);
int elementLenght = array2[0].length();
System.out.println("segment["+segmentCounter +"] = "+ (currentPos+1) +","+ (currentPos+elementLenght));
for(String s : array2)
{
currentPos += s.length();
}
}
else
{
currentPos += array[i].length();
}
}
}
}
您的輸入看起來像您的示例,您需要獲取特定標記之間的文本嗎?然後使用apache commons lang包(http://commons.apache.org/lang/)執行簡單的StringUtils.substringsBetween(yourString,「< B>」,「</B>」)。
如果您正在尋找一種更通用的解決方案,對於不同的或可能嵌套的標籤,您可能需要查看採用html輸入並創建xml文檔的解析器,例如NekoHTML,TagSoup,jTidy 。然後,您可以在xml文檔上使用XPath來訪問內容。
看起來像從java.util.regex包加上一些簡單的數學正則表達式是走在這條 – pro 2009-01-06 10:30:59
或更好的方式一樣[^ <]+一個正則表達式匹配每個段 – pro 2009-01-06 12:11:28