मैं एक स्ट्रिंग है,दो अक्षर के बीच एक स्ट्रिंग कैसे प्राप्त करें?
String s = "test string (67)";
मैं कोई 67 जो बीच स्ट्रिंग है (और) प्राप्त करना चाहते हैं।
क्या कोई मुझे बता सकता है कि यह कैसे करें?
मैं एक स्ट्रिंग है,दो अक्षर के बीच एक स्ट्रिंग कैसे प्राप्त करें?
String s = "test string (67)";
मैं कोई 67 जो बीच स्ट्रिंग है (और) प्राप्त करना चाहते हैं।
क्या कोई मुझे बता सकता है कि यह कैसे करें?
ऐसा करने का "सामान्य" तरीका शुरुआत से स्ट्रिंग को पार्स करना है, पहले ब्रैकेट से पहले सभी पात्रों को फेंकना, पहले ब्रैकेट के बाद वर्णों को रिकॉर्ड करना और दूसरे ब्रैकेट के बाद पात्रों को फेंकना है।
मुझे यकीन है कि एक रेगेक्स लाइब्रेरी है या ऐसा करने के लिए कुछ है।
जावा नियमित अभिव्यक्ति का समर्थन करता है एक regexp4j पुस्तकालय के लिए कोई ज़रूरत नहीं है; की विषमताएं माध्यम से जा रहा बिना) –
संभवतः एक बहुत साफ RegExp है, लेकिन मैं उस क्षेत्र में noob हूँ, इसलिए बजाय ...
String s = "test string (67)";
s = s.substring(s.indexOf("(") + 1);
s = s.substring(0, s.indexOf(")"));
System.out.println(s);
।। रेगेक्स पार्सिंग, मुझे लगता है कि यह सबसे अच्छा तरीका है आवश्यक स्ट्रिंग निकालें। – verisimilitude
regex कहीं अधिक शक्तिशाली द्वारा और अधिक मामलों में ले जा सकते हैं, लेकिन सादगी के लिए, यह काम करता है ... – MadProgrammer
गंभीरता से, क्यों यह एक नीचे वोट को आकर्षित करेगा? क्या यह काम नहीं करता है? क्या यह ops सवाल का जवाब नहीं देता है? – 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
क्या आप कोड का संक्षिप्त विवरण शामिल कर सकते हैं? –
@ एनएन। मैंने कोड –
एक और विभाजन विधि का उपयोग करने का तरीका
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));
के लिए और अधिक टिप्पणियां दीं मुझे लगता है कि आपको इसे "। *?" का उपयोग करके एक गैर लालची मैच बनाना चाहिए। बजाय। अन्यथा, यदि स्ट्रिंग की तरह soemthing है 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);
सबस्ट्रिंग । कोई CamelCase। – ssayyed
यद्यपि अगर आप की तरह कुछ "परीक्षण) स्ट्रिंग (67)" है एक छोटे से समझा क्या आपके कोड के लिए करता है के द्वारा अपने जवाब बाहर पैड काम नहीं करेगा। – 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 समापन स्ट्रिंग की तलाश द्वारा आसान हो अभ्यस्त की भी वहाँ है, तो अनेक गतिविधियां संभाल की अनुमति देगा।
आप यहाँ से इस पुस्तकालय डाउनलोड कर सकते हैं:
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, ""));
}
यह और अधिक जटिल regex समस्याओं के लिए मदद मिल सकती है: https://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.4
कम से कम सामान्य तरीके से मैं Regex और पैटर्न/Matcher वर्गों के साथ यह करने के लिए मिल गया जहां आप अक्षर के दो सेट के बीच पाठ प्राप्त करना चाहते हैं।
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>>
ऐसे कई तरीके हैं - जब तक आप तक पहुँचने आप स्ट्रिंग में वर्ण पुनरावृति '(' या मिल सकता है के सूचकांक पहले '(' और ')' और स्ट्रिंग के साथ यह करना या, ज्यादातर लोगों क्या करेंगे, रेगुलर एक्सप्रेशन का उपयोग –