2013-03-06 7 views
29

मैं किसी भी स्ट्रिंग के अंतिम तीन chracters लेने और इसे एक और स्ट्रिंग चर के रूप में सहेजने की कोशिश कर रहा हूं। मुझे अपनी विचार प्रक्रिया के साथ कुछ कठिन समय है।किसी भी स्ट्रिंग से अंतिम तीन वर्ण प्राप्त करें - जावा

String word = "onetwotwoone" 
int length = word.length(); 
String new_word = id.getChars(length-3, length, buffer, index); 

मुझे नहीं पता कि बफर या इंडेक्स की बात होने पर GetChars विधि का उपयोग कैसे करें। ग्रहण मुझे वहां पर बना रहा है। कोई सुझाव?

+0

बफर एक 'char []' है जहां पात्र जाएंगे, और अनुक्रमणिका उस सरणी की शुरुआत है जहां आप प्रतिलिपि बनाना चाहते हैं। बस आकार 3 का एक char [] बनाएं और 0 को इंडेक्स सेट करें। हालांकि सबस्ट्रिंग शायद बेहतर होगा –

+0

char [] (String.toCharArray() में कनवर्ट करने के साथ सहमत है और फिर अंतिम 3 प्रिंट करें) – amitmah

उत्तर

106

क्यों नहीं String substr = word.substring(word.length() - 3)?

अद्यतन

सुनिश्चित करें कि आप जाँच लें कि String कम से कम 3 अक्षरों है लंबे substring() कॉल करने से पहले सुनिश्चित करें:

if (word.length() == 3) { 
    return word; 
} else if (word.length() > 3) { 
    return word.substring(word.length() - 3); 
} else { 
    // whatever is appropriate in this case 
    throw new IllegalArgumentException("word has less than 3 characters!"); 
} 
+0

स्ट्रिंग के साथ सावधान रहना होगा तीन से कम वर्णों के साथ, मुझे लगता है कि नकारात्मक इनपुट मूल स्ट्रिंग को वापस कर देगा (इसके बारे में गलत हो सकता है), जो कि वे पूरा करने की कोशिश कर रहे हैं, के लिए स्वीकार्य हो सकता है या नहीं। – celestialorb

+1

@celestialorb: [डॉक्स] के अनुसार एक ऋणात्मक सूचकांक अपवाद का कारण बन जाएगा (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring%28int%29)। – MvG

+0

@celestialorb, उल्लेख के लिए धन्यवाद, वैसे भी प्रश्न के प्रारंभिक कोड को अपवादों को भी संभालना है, इसलिए मैं इस मुद्दे के बारे में सोच नहीं रहा था। – Egor

1

String newString = originalString.substring(originalString.length()-3);

+0

@ एमवीजी: अद्यतन उत्तर। हाँ एक टाइपो – Cratylus

0

getChars स्ट्रिंग विधि एक मूल्य वापस नहीं करता है , इसके बजाय यह आपके परिणाम को आपके बफर (या गंतव्य) सरणी में डंप करता है। इंडेक्स पैरामीटर आपके गंतव्य सरणी में स्टार्ट ऑफ़सेट का वर्णन करता है।

getChars विधि के अधिक verbose विवरण के लिए इस link को आजमाएं।

मैं इस पर दूसरों से सहमत हूं, मुझे लगता है कि आप जो कुछ हासिल करने की कोशिश कर रहे हैं उसे संभालने के लिए सबस्ट्रिंग एक बेहतर तरीका होगा।

0

आप सबस्ट्रिंग

String word = "onetwotwoone" 
int lenght = word.length 
String numbers = word.substring(word.length() - 3); 
+0

था, यह 'word.length() ' – Shardul

3
public String getLastThree(String myString) { 
    if(myString.length() > 3) 
     return myString.substring(myString.length()-3); 
    else 
     return myString; 
} 
1

उपयोग कर सकते हैं आप String पिछले तीन पात्रों की रचना चाहते हैं, आप substring(int) उपयोग कर सकते हैं:

String new_word = word.substring(word.length() - 3); 

आप वास्तव में उन्हें एक के रूप में चाहते हैं चरित्र सरणी, आपको

char[] buffer = new char[3]; 
int length = word.length(); 
word.getChars(length - 3, length, buffer, 0); 
012 लिखना चाहिए

getChars पर पहले दो तर्क आपको उस स्ट्रिंग के हिस्से को इंगित करते हैं जिसे आप निकालना चाहते हैं। तीसरा तर्क वह सरणी है जिसमें वह हिस्सा रखा जाएगा। और अंतिम तर्क बफर में स्थिति देता है जहां ऑपरेशन शुरू होता है।

यदि स्ट्रिंग में तीन से कम वर्ण हैं, तो आपको उपरोक्त मामलों में से किसी एक में अपवाद मिलेगा, इसलिए आप इसकी जांच कर सकते हैं।

12

यहाँ कुछ संक्षिप्त कोड का उपयोग कर regex काम करता है: 3 तक

String last3 = str.replaceAll(".*?(.?.?.?)?$", "$1"); 

यह कोड लौटाता है ; यदि 3 से कम हैं तो यह स्ट्रिंग देता है।

यह एक पंक्ति में regex के बिना सुरक्षित रूप सेकैसे करना है:

String last3 = str == null || str.length() < 3 ? 
    str : str.substring(str.length() - 3); 

द्वारा "सुरक्षित रूप से", मेरा मतलब है एक अपवाद फेंकने के बिना यदि स्ट्रिंग nulls या कम से 3 अक्षरों (है सब अन्य उत्तरों "सुरक्षित" नहीं हैं)।


उपरोक्त कोड, इस कोड को प्रभाव में समान होता है अगर आप एक अधिक वर्बोज़, लेकिन संभावित आसान-टू-रीड रूप पसंद करते हैं:

String last3; 
if (str == null || str.length() < 3) { 
    last3 = str; 
} else { 
    last3 = str.substring(str.length() - 3); 
} 
+0

होना चाहिए, लेकिन इसके टर्नरी ऑपरेटर और कोष्ठक की कमी के साथ समझना काफी मुश्किल है। तो मैं इसके खिलाफ सलाह दूंगा। -1। – MvG

+1

@MvG तो यह उत्तर "सहायक नहीं है"? (यही एक -1 वोट का मतलब है)। टर्नरी सिंटैक्स का उपयोग क्यों सहायक नहीं है? और आप ब्रैकेट कहां रखेंगे? इसके विपरीत, मुझे लगता है कि यह उत्तर उपयोगी है, विशेष रूप से अन्य सभी को विस्फोट करने पर विचार करना होगा यदि शून्य या छोटा इनपुट सौंप दिया गया हो। – Bohemian

+0

सहायक नहीं है क्योंकि मुझे विश्वास है (माफ करना अगर मैं वहां गलत हूं) कि अधिकांश उपयोगकर्ता जो किसी दिए गए स्ट्रिंग से सबस्ट्रिंग निकालने के साथ संघर्ष करते हैं, उनके सिर को पढ़ने के लिए अपने सिर पर चलने वाले तरीके से होंगे। लंबाई की जांच करना बहुत अच्छा है, लेकिन इस स्तर पर मैं अधिक वर्बोज़ समाधानों को सहायक मानता हूं, और गुप्त समाधान केवल उलझन में हैं। कोष्ठक के रूप में: मैं यह लिखूंगा '... = ((... || ...)? ...: ...) '। आपके द्वारा जोड़ा गया लाइन रैप चीजों को भी बेहतर बनाता है। – MvG

6

मैं से StringUtils वर्ग से right विधि पर विचार करेंगे अपाचे कॉमन्स लैंग: http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#right(java.lang.String,%20int)

यह सुरक्षित है। आपको NullPointerException या StringIndexOutOfBoundsException नहीं मिलेगा।

उदाहरण उपयोग:

StringUtils.right("abcdef", 3)

आप उपरोक्त लिंक के तहत और अधिक उदाहरण मिल सकते हैं।

+0

एंड्रॉइड में यह फ़ंक्शन नहीं है – Pranaysharma

+2

यह सही उत्तर होना चाहिए! – hackingforgirls

संबंधित मुद्दे