標準Java API中有沒有一個簡短的手段,它允許我從1行中的字符串1^2^3^4
中獲取令牌?我想說第三個元素「3」被提取。我不想要編譯正則表達式的任何東西。讓它在預編譯的正則表達式中傳遞是沒問題的,但每次調用方法時都會不斷編譯正則表達式會傷害CPU。字符串在java中分割/標記化而不編譯正則表達式?
0
A
回答
3
您可以使用預編譯的Pattern輕鬆拆分;
static Pattern regex = Pattern.compile("\\^");
private static String getEntry(String input, int which)
{
return regex.split(input)[which];
}
...或者交替,只是做直線代碼,而不是使用正則表達式可言,因爲它不會產生非所需的String對象,它應該會更快。
private static String getEntry(String input, int which)
{
int left, right = -1;
do {
left = right;
right = input.indexOf('^', right+1);
}
while(which-- > 0 && right >= 0);
if(which != -1)
return null;
if(right == -1)
return input.substring(left+1);
return input.substring(left+1, right);
}
1
您可以使用Pattern.compile
編譯Java中的正則表達式,這將產生一個Pattern
對象。您可以隨意重複使用該對象,而無需再次編譯正則表達式。只需將編譯後的模式存儲在變量中,以便每次需要時都可以檢索它。
如果您定義的模式匹配^
之間的任意數字,則可以使用Pattern.matcher()
創建一個與您的輸入相匹配的Matcher
對象。 Matcher.group(int)
方法會讓您訪問給定輸入中的特定匹配項。
0
我想如果您希望避免正常表達式完全針對感知的性能問題,您可以嘗試Apache Commons StringUtils split(),它可以進行迭代處理。我沒有將它與Java standard library one進行比較,但是看到源頭我很難想象顯着的性能差異。
1
有Scanner類可以讓你定義一個分離器字符,所以你可以調用next()函數,直到找到你想要的元素。在這種情況下,不需要使用正則表達式。
相關問題
- 1. 正則表達式分割字符串中的標記
- 2. 正則表達式分割字符串
- 3. 正則表達式分割字符串
- 4. 正則表達式分割字符串
- 5. 正則表達式分割字符串
- 6. 在Java中使用正則表達式分割字符串
- 7. 使用正則表達式在java中分割字符串
- 8. 在java中使用正則表達式分割字符串
- 9. 在java中使用正則表達式的分割字符串
- 10. Java字符串分割正則表達式保留定界符
- 11. 正則表達式分割字符串不包括連字符
- 12. Java正則表達式,分割字符串在標點符號除括號外
- 13. 正則表達式打破由字符串分割字符串
- 14. 使用正則表達式分割Java字符串
- 15. Java正則表達式來分割字符串與int,雙打
- 16. Java使用和分割字符串使用正則表達式
- 17. java的正則表達式分割字符串
- 18. Java擴展字符串分割正則表達式括號
- 19. Java的正則表達式嘗試了分割字符串
- 20. 使用自定義正則表達式分割字符串java
- 21. 正則表達式切割字符串
- 22. Java正則表達式使用不同的分隔符分割字符串
- 23. 分割字符串在C#中使用正則表達式
- 24. 在Python中使用正則表達式分割字符串
- 25. 在Go中使用正則表達式分割字符串
- 26. 分割字符串在C#中使用正則表達式
- 27. 在python中使用正則表達式分割字符串
- 28. 正則表達式在JavaScript中分割一個html字符串?
- 29. 用正則表達式在javascript中分割字符串?
- 30. 使用正則表達式在JavaScript中分割字符串
你的意思是你不想使用String.split(),因爲它必須使用一種模式? – 2013-04-06 10:38:47
你能展示一些代碼嗎?我知道這就是你要求的,但是你完全確定CPU有損害,你不僅僅是過早地優化了嗎? – Gothmog 2013-04-06 10:51:21
@Gothmog是的。最後一次使用Java 1.5或1.6進行檢查時,編譯器不會對其進行優化(即:編譯模式並將其替換爲引用)。我假設情況仍然如此。使用hprof,我已經看到了一些簡單的方法,就像一個方法中的正則表達式佔用了很大一部分cpu計算時間。 – Zombies 2013-04-06 11:13:56