回答
這樣做的「通用」方法是從開始解析字符串,在第一個括號之前丟棄所有字符,在第一個括號之後記錄字符,並在第二個括號之後丟棄字符。
我確定有一個正則表達式庫或者其他的東西。
Java支持正則表達式,不需要regexp4j庫;) –
有可能是一個非常整潔的正則表達式,但我在這方面的小白,所以不是...
String s = "test string (67)";
s = s.substring(s.indexOf("(") + 1);
s = s.substring(0, s.indexOf(")"));
System.out.println(s);
沒有經歷過奇怪的正則表達式解析,我認爲這是最好的方式提取所需的字符串。 – verisimilitude
正則表達式更強大,可以採取更多的情況下,但爲簡單起見,這項工作... – MadProgrammer
嚴重的是,爲什麼這會吸引投票?它不起作用嗎?它不回答操作問題嗎? – MadProgrammer
String s = "test string (67)";
int start = 0; // '(' position in string
int end = 0; // ')' position in string
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '(') // Looking for '(' position in string
start = i;
else if(s.charAt(i) == ')') // Looking for ')' position in string
end = i;
}
String number = s.substring(start+1, end); // you take value between start and end
能否請您提供一段簡短的代碼說明? –
@ N.N。我對代碼 –
使用的另一種劃分方法做的方式
public static void main(String[] args) {
String s = "test string (67)";
String[] ss;
ss= s.split("\\(");
ss = ss[1].split("\\)");
System.out.println(ss[0]);
}
Java supports Regular Expressions ,但如果你真的想用它們來提取匹配,它們會很麻煩。我想,你在你的例子希望字符串的最簡單的辦法是隻使用正則表達式支持在String
類的replaceAll
方法:
String x = "test string (67)".replaceAll(".*\\(|\\).*", "");
// x is now the String "67"
這只是刪除了一切對和包括第一(
,以及)
及其後的所有內容。這只是留下括號之間的東西。
但是,結果仍然是String
。如果你想要一個整數的結果,而不是,那麼你需要做的另一次轉換:
int n = Integer.parseInt(x);
// n is now the integer 67
通過使用正則表達式:
String s = "test string (67)";
Pattern p = Pattern.compile("\\(.*?\\)");
Matcher m = p.matcher(s);
if(m.find())
System.out.println(m.group().subSequence(1, m.group().length()-1));
給出了更多評論我認爲你應該通過使用「。*?」使其成爲非貪婪的匹配。代替。否則,如果字符串類似「測試字符串(67)和(68)」,則返回「67」和(68「。 –
同意。添加」?「。 –
使用Pattern and Matcher
public class Chk {
public static void main(String[] args) {
String s = "test string (67)";
ArrayList<String> arL = new ArrayList<String>();
ArrayList<String> inL = new ArrayList<String>();
Pattern pat = Pattern.compile("\\(\\w+\\)");
Matcher mat = pat.matcher(s);
while (mat.find()) {
arL.add(mat.group());
System.out.println(mat.group());
}
for (String sx : arL) {
Pattern p = Pattern.compile("(\\w+)");
Matcher m = p.matcher(sx);
while (m.find()) {
inL.add(m.group());
System.out.println(m.group());
}
}
System.out.println(inL);
}
}
說出變量名稱可以使方法更友好。 – Zon
嘗試像這樣
String s="test string(67)";
String requiredString = s.substring(s.indexOf("(") + 1, s.indexOf(")"));
該方法的子串簽名是:
s.substring(int start, int end);
子字符串。如果你有類似「test」字符串(67)的東西, – ssayyed
不會工作。 – user2871190
我得到了這樣的答案。試試吧
String value = "test string (67)";
int intValue =Integer.valueOf(value.replaceAll("[^0-9]", ""));
在單行線,我建議:
String input = "test string (67)";
input = input.subString(input.indexOf("(")+1, input.lastIndexOf(")"));
System.out.println(input);`
String s = "test string (67)";
System.out.println(s.substring(s.indexOf("(")+1,s.indexOf(")")));
你可以使用Apache公共庫的StringUtils的做到這一點。
import org.apache.commons.lang3.StringUtils;
...
String s = "test string (67)";
s = StringUtils.substringBetween(s, "(", ")");
....
這個問題不從,你需要做的indexOf使用阿帕奇百科全書庫一個非常有用的解決方案。
StringUtils.substringBetween(s, "(", ")");
這個方法可以讓你即使處理,即使有收字符串,不會是通過尋找的indexOf收盤字符串容易多次出現。
你可以從這裏下載這個庫: https://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.4
最低通用的方式,我發現做到這一點與正則表達式和模式/匹配器類:
String text = "test string (67)";
String START = "\\("; // A literal "(" character in regex
String END = "\\)"; // A literal ")" character in regex
// Captures the word(s) between the above two character(s)
String pattern = START + "(\w+)" + END;
Pattern pattern = Pattern.compile(pattern);
Matcher matcher = pattern.matcher(text);
while(matcher.find()) {
System.out.println(matcher.group()
.replace(START, "").replace(END, ""));
}
這可能有助於爲更復雜的正則表達式的問題您想在兩組字符之間獲取文本。
String result = s.substring(s.indexOf("(") + 1, s.indexOf(")"));
請通過縮進4個空格來格式化你的代碼,並且通過解釋你的代碼的作用那些訪問誰不確定什麼'.substring'和.indexOf'。 – Bugs
其他可能的解決方案是使用lastIndexOf
在那裏將尋找從落後的字符或字符串。
我的方案,我已經下String
,我不得不提取<<UserName>>
1QAJK-WKJSH_MyApplication_Extract_<<UserName>>.arc
所以,indexOf
和StringUtils.substringBetween
是不是有益,因爲它們開始尋找從起始符。
所以,我用lastIndexOf
String str = "1QAJK-WKJSH_MyApplication_Extract_<<UserName>>.arc";
String userName = str.substring(str.lastIndexOf("_") + 1, str.lastIndexOf("."));
而且,它給了我
<<UserName>>
- 1. 如何獲得兩個字符[字符串]之間的字符串? PHP
- 2. 如何獲得兩個字符串之間的字符串,其中兩個字符串是重複的?
- 3. 如何獲得兩個字符串之間最重複的子字符串?
- 4. 如何獲取Ruby中兩個字符之間的字符串?
- 5. 如何獲得兩個字符串之間的相似度?
- 6. 如何獲得兩個特定字符串之間的文本
- 7. 如何獲得兩個命令之間的字符串在vim
- 8. PHP - 如何獲得兩個特定字符之間的字符串
- 9. 獲得兩個字符串之間的多個字符串的文件
- 10. 如何獲取字符順序的兩個字符之間的子字符串?
- 11. 如何獲取PHP中字符串中的兩個字符之間的字符
- 12. 如何獲得兩個字符串之間用短語分隔?
- 13. 如何找到兩個字符串之間的子字符串?
- 14. 使用sed獲取兩個字符串之間的字符串
- 15. 獲取兩個字符串之間的字符串
- 16. 獲取兩個字符串之間的字符串?
- 17. 如何獲取字典中兩個短字符串之間的字符串... Python
- 18. 兩個字符串之間
- 19. 在字符串中的兩個字符之間得到值
- 20. Perl正則表達式,獲得兩個字符串之間的字符串
- 21. 如何獲取Java中兩個數字之間的字符串?
- 22. 字符串Manipultation - 兩個其他字符串之間獲取字符串?
- 23. C#獲取兩個字符之間字符串中的字符串
- 24. 如何提取兩個「/」字符之間的字符串
- 25. 如何找到兩個「/」字符之間的字符串 - php
- 26. 如何提取兩個管道字符之間的字符串?
- 27. 如何提取兩個字符之間的字符串?
- 28. 如何替換Sublime中兩個字符之間的字符串
- 29. 獲取unix中兩個特定字符之間的字符串
- 30. 刪除字符串之間的兩個符號之間的字符串
有幾種方法 - 直到你到達你可以遍歷字符的字符串中的'('或找到第一個'('和')'的索引,並且用子字符串或者大多數人會做的事情使用正則表達式。 –