एक स्ट्रिंग से अंतिम वर्ण कैसे निकालें?


483

मैं एक स्ट्रिंग से अंतिम चरित्र को निकालना चाहता हूं। मैंने ऐसा करने की कोशिश की है:

public String method(String str) {
    if (str.charAt(str.length()-1)=='x'){
        str = str.replace(str.substring(str.length()-1), "");
        return str;
    } else{
        return str;
    }
}

स्ट्रिंग की लंबाई प्राप्त करना - 1 और अंतिम पत्र को कुछ भी नहीं (इसे हटाने) के साथ प्रतिस्थापित करना, लेकिन हर बार जब मैं कार्यक्रम चलाता हूं, तो यह मध्य अक्षरों को हटा देता है जो अंतिम पत्र के समान होते हैं।

उदाहरण के लिए, शब्द "प्रशंसक" है; विधि चलाने के बाद, मुझे "प्रशंसा" मिलती है। मैं चाहता हूं कि यह प्रशंसा शब्द लौटाए।

जवाबों:


665

replaceएक पत्र के सभी उदाहरणों को बदल देगा। आपको बस इतना करना है substring():

public String method(String str) {
    if (str != null && str.length() > 0 && str.charAt(str.length() - 1) == 'x') {
        str = str.substring(0, str.length() - 1);
    }
    return str;
}

7
मैं null != str && जाँच की शुरुआत में जोड़ना चाहता हूँ ।
जेम्स ओर्वेक सेप

12
तुम्हारा मतलब है str != null &&!
SSPoke

2
@ प्रैसोक यह वही बात है, तुम्हारा पढ़ने के लिए बस थोड़ा सा अच्छा है :)
मार्को

6
@ मार्को लोल हाँ क्योंकि यह मानक है, अजीब लगता है जब लोग अपना सामान बनाते हैं।
SSpoke

26
@AdamJensen C में आप गलती से लिख सकते हैं if (str = NULL)जो न केवल हमेशा गलत (NULL == 0 == असत्य) का मूल्यांकन करेगा, बल्कि एक मान भी देगा, strजो सबसे अधिक संभावना है कि आप क्या करना चाहते थे। आप if (NULL = str)हालांकि नहीं लिख सकते क्योंकि NULL एक चर नहीं है और इसे सौंपा नहीं जा सकता है। तो, NULL को बाईं ओर रखना एक सुरक्षित सम्मेलन है। हालांकि यह जावा में कोई समस्या नहीं है।
ज्ञान उर्फ ​​गैरी ब्यून

236

सिर्फ एक लाइनर ही क्यों?

private static String removeLastChar(String str) {
    return str.substring(0, str.length() - 1);
}

पूर्ण कोड

import java.util.*;
import java.lang.*;

public class Main {
    public static void main (String[] args) throws java.lang.Exception {
        String s1 = "Remove Last CharacterY";
        String s2 = "Remove Last Character2";
        System.out.println("After removing s1==" + removeLastChar(s1) + "==");
        System.out.println("After removing s2==" + removeLastChar(s2) + "==");

    }

    private static String removeLastChar(String str) {
        return str.substring(0, str.length() - 1);
    }
}

डेमो


8
अशक्त और खाली स्ट्रिंग के लिए जाँच पर विचार किया जाना चाहिए .. @ याकूबबेक संस्करण बेहतर है
केडीजवा

1
@ कज्वा: ऊपर मान्य मान्य स्ट्रिंग के पारित होने के साथ है। इसके अलावा, मुझे कोशिश करनी होगी कि स्ट्रिंग सही हो, यह जांचने के लिए ब्लॉक भी जोड़ना होगा ...
फहीम पारकर

मैंने return str.substring(0,str.length()-1);सुधार के रूप में अशक्त स्ट्रिंग के लिए चेक जोड़ा
श्री जूल

धन्यवाद यह स्रोत gist.github.com/CrandellWS/e254a215c54aa4be0400a3511a23f730
CrandellWS

@ फहीमपारकर: क्योंकि यह संभव हो सकता है कि अंतिम चरित्र वह चरित्र नहीं है जिसे हम हटाना चाहते हैं। लेकिन सवाल के अनुसार, आपका उत्तर सही है
Ash18

91

चूँकि हम किसी विषय पर हैं, इसलिए व्यक्ति नियमित अभिव्यक्तियों का भी उपयोग कर सकता है

"aaabcd".replaceFirst(".$",""); //=> aaabc  

3
अच्छा तरीका है, जब आप चाहते हैं / ठीक से परिभाषित करने की आवश्यकता है कि आप स्ट्रिंग के अंत से क्या ट्रिम करना चाहते हैं, न कि केवल एक्स जो भी चार्ट
जुलिएन

73

वर्णित समस्या और प्रस्तावित समाधान कभी-कभी विभाजकों को हटाने से संबंधित होते हैं। यदि यह आपका मामला है, तो Apache Commons StringUtils पर एक नज़र डालें, इसमें एक विधि है जिसे रिमेन्ड एंड कहा जाता है जो बहुत ही सुरुचिपूर्ण है।

उदाहरण:

StringUtils.removeEnd("string 1|string 2|string 3|", "|");

परिणाम होगा: "स्ट्रिंग 1 | स्ट्रिंग 2 | स्ट्रिंग 3"


यहाँ उपरोक्त स्ट्रिंग के लिए JAR है: commons.apache.org/proper/commons-lang/download_lang.cgi
टोनी एच।

47
public String removeLastChar(String s) {
    if (s == null || s.length() == 0) {
        return s;
    }
    return s.substring(0, s.length()-1);
}

4
क्या होगा यदि अंतिम चरित्र एक उच्च / निम्न सरोगेट जोड़ी है?
रॉबर्ट एलन हेनिगन लेहि

@RobertAllanHenniganLeahy मैंने एक उत्तर पोस्ट किया है जो उस परिदृश्य को संभालता है।
पैट्रिक पार्कर

33

पहिया को सुदृढ़ करने का प्रयास न करें, जबकि दूसरों ने पहले से ही स्ट्रिंग हेरफेर करने के लिए पुस्तकालय लिखे हैं: org.apache.commons.lang3.StringUtils.chop()


2
यदि आप केवल अंतिम वर्ण को निकालना चाहते हैं - तो यह सबसे अच्छा उत्तर है!
१।

नहीं, यह नहीं है, क्योंकि "जावा का उपयोग करें" कोटलिन प्रश्न का एक भयानक जवाब है।
मिकेल लोकेके

2
@ MikkelLøkke मुझे नहीं पता, लेकिन यह सवाल किसी भी मामले में कोटलिन सवाल नहीं है ??
मेसाउंड

19

इसे इस्तेमाल करो:

 if(string.endsWith("x")) {

    string= string.substring(0, string.length() - 1);
 }

11
if (str.endsWith("x")) {
  return str.substring(0, str.length() - 1);
}
return str;

उदाहरण के लिए, शब्द "प्रशंसक" है; विधि चलाने के बाद, मुझे "प्रशंसा" मिलती है। मैं चाहता हूं कि यह प्रशंसा शब्द लौटाए।

मामले में आप अंग्रेजी शब्दों को स्टेम करने की कोशिश कर रहे हैं

स्टेमिंग उनके तने, आधार या जड़ रूप में आमतौर पर एक लिखित शब्द के रूप में विभक्त (या कभी-कभी व्युत्पन्न) शब्दों को कम करने की प्रक्रिया है।

...

अंग्रेजी के लिए एक स्टेमर, उदाहरण के लिए, जड़ "बिल्ली", और "स्टेमर", "स्टेमिंग", "स्टेमेड" के रूप में स्ट्रिंग "बिल्लियों" (और संभवतः "बिल्ली के समान", "बिल्ली" आदि) को पहचानना चाहिए। "स्टेम" पर आधारित है। एक स्टेमिंग एल्गोरिथ्म शब्द "फिशिंग", "फिश्ड", "फिश" और "फिशर" को रूट शब्द, "फिश" को कम करता है।

Lucene स्टेमर्स के बीच अंतर: EnglishStemmer, PorterStemmer, LovinsStemmer कुछ जावा विकल्पों को रेखांकित करता है।


11

कोटलिन में आप स्ट्रिंग क्लास के ड्रॉपलैस्ट () विधि का उपयोग कर सकते हैं। यह स्ट्रिंग से दिए गए नंबर को छोड़ देगा, एक नया स्ट्रिंग लौटाएगा

var string1 = "Some Text"
string1 = string1.dropLast(1)

9

जहाँ तक पठनीयता का सवाल है, मुझे यह सबसे संक्षिप्त लगता है

StringUtils.substring("string", 0, -1);

नकारात्मक इंडेक्स का उपयोग अपाचे के स्ट्रिंगटिल्ट्स उपयोगिता में किया जा सकता है। सभी नकारात्मक संख्याओं का इलाज स्ट्रिंग के अंत से ऑफसेट से किया जाता है।


मैं यह नहीं कहूंगा कि यह सबसे अच्छा उत्तर है - सरलता के लिए org.apache.commons.lang.StringUtils.chop () विधि का उपयोग करें। फिर भी, -1 के साथ चाल वास्तव में अच्छी है और अन्य उत्तरों को देखते हुए वास्तव में उपयोग नहीं किया जाता है / अच्छी तरह से जाना जाता है।
१।

4

'xxx' की अंतिम घटना को हटाता है:

    System.out.println("aaa xxx aaa xxx ".replaceAll("xxx([^xxx]*)$", "$1"));

यदि यह अंतिम है तो 'xxx' की अंतिम घटना को हटा देता है:

    System.out.println("aaa xxx aaa  ".replaceAll("xxx\\s*$", ""));

आप जो चाहते हैं उस पर 'xxx' की जगह ले सकते हैं लेकिन विशेष वर्णों पर ध्यान दें


4
 // creating StringBuilder
 StringBuilder builder = new StringBuilder(requestString);
 // removing last character from String
 builder.deleteCharAt(requestString.length() - 1);


3

StringBuilder वर्ग के लिए देखो:

    StringBuilder sb=new StringBuilder("toto,");
    System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto"

2
// Remove n last characters  
// System.out.println(removeLast("Hello!!!333",3));

public String removeLast(String mes, int n) {
    return mes != null && !mes.isEmpty() && mes.length()>n
         ? mes.substring(0, mes.length()-n): mes;
}

// Leave substring before character/string  
// System.out.println(leaveBeforeChar("Hello!!!123", "1"));

public String leaveBeforeChar(String mes, String last) {
    return mes != null && !mes.isEmpty() && mes.lastIndexOf(last)!=-1
         ? mes.substring(0, mes.lastIndexOf(last)): mes;
}

2

एक-लाइनर जवाब (बस एक अजीब विकल्प - घर पर यह कोशिश न करें, और पहले से दिए गए शानदार जवाब):

public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}

2

क्यों नहीं बचते क्रम का इस्तेमाल ...!

System.out.println(str + '\b');

अब जीवन बहुत आसान है। XD! ~ ए पठनीय one-liner


यह जावा नहीं है LMAO
बरस्कनिस्ट

स्ट्रिंग रीडर, टेक्स्ट टर्मिनल्स आदि द्वारा '\ b' के विशेष व्यवहार की व्याख्या की जाती है। अन्यथा यह केवल एक और ASCII चरित्र प्रतिनिधित्व है। stackoverflow.com/a/11891895/4589003
सुदीप भंडारी

2

यहां अधिकांश उत्तर सरोगेट जोड़े के बारे में भूल गए ।

उदाहरण के लिए, वर्ण 𝕫 (कोडपॉइंट यू + 1 डी 56 बी) एक एकल में फिट नहीं होता है char, इसलिए प्रतिनिधित्व करने के लिए, इसे दो वर्णों की सरोगेट जोड़ी बनाना होगा।

यदि कोई वर्तमान में स्वीकृत उत्तर को लागू करता है (उपयोग करते हुए str.substring(0, str.length() - 1), तो एक सरोगेट जोड़ी को हटा देता है, जिससे अप्रत्याशित परिणाम प्राप्त होते हैं।

एक जांच में यह भी शामिल होना चाहिए कि क्या अंतिम चरित्र एक सरोगेट जोड़ी है:

public static String removeLastChar(String str) {
    Objects.requireNonNull(str, "The string should not be null");
    if (str.isEmpty()) {
        return str;
    }

    char lastChar = str.charAt(str.length() - 1);
    int cut = Character.isSurrogate(lastChar) ? 2 : 1;
    return str.substring(0, str.length() - cut);
}

एक कोने के मामले में: क्या यह कभी भी फेंक सकता है IndexOutOfBoundsException? (जैसे कि यह संभव है कि Character.isSurrogate तब सच हो जब वास्तव में इससे पहले कोई चार नहीं है, str.length()-cutनकारात्मक बना रहा है)।
GPI

हाँ, यह संभव है। यह वैसे भी एक अमान्य स्ट्रिंग है, लेकिन फिर भी - यह संभव है, हाँ। एक तो बदल दिया जाना चाहिए 2द्वारा Math.min(2, str.length())
एम सी सम्राट

1

जावा 8

import java.util.Optional;

public class Test
{
  public static void main(String[] args) throws InterruptedException
  {
    System.out.println(removeLastChar("test-abc"));
  }

  public static String removeLastChar(String s) {
    return Optional.ofNullable(s)
      .filter(str -> str.length() != 0)
      .map(str -> str.substring(0, str.length() - 1))
      .orElse(s);
    }
}

आउटपुट: टेस्ट-एब


1
 "String name" = "String name".substring(0, ("String name".length() - 1));

मैं अपने कोड में इसका उपयोग कर रहा हूं, यह आसान और सरल है। यह केवल तभी काम करता है जब स्ट्रिंग है> 0. मैं इसे एक बटन से जुड़ा हुआ हूं और यदि कथन में निम्नलिखित है

if ("String name".length() > 0) {
    "String name" = "String name".substring(0, ("String name".length() - 1));
}

1
public String removeLastCharacter(String str){
       String result = null;
        if ((str != null) && (str.length() > 0)) {
          return str.substring(0, str.length() - 1);
        }
        else{
            return "";
        }

}

0

यदि आपके पास विशेष चरित्र है जैसे; json में केवल String.replace (";", "") का उपयोग करें अन्यथा आपको स्ट्रिंग माइनस में सभी वर्णों को फिर से लिखना होगा।


0

अंत में पुनरावृत्ति में चार कैसे करें:

public static String  removeChar(String word, char charToRemove)
    {
        String char_toremove=Character.toString(charToRemove);
        for(int i = 0; i < word.length(); i++)
        {
            if(word.charAt(i) == charToRemove)
            {
                String newWord = word.substring(0, i) + word.substring(i + 1);
                return removeChar(newWord,charToRemove);
            }
        }
        System.out.println(word);
        return word;
    }

उदाहरण के तौर पर:

removeChar ("hello world, let's go!",'l')  "heo word, et's go!llll"
removeChar("you should not go",'o')  "yu shuld nt goooo"

0

यहां एक उत्तर है जो बेसिक बहुभाषी विमान (जावा 8+) के बाहर कोडपॉइंट्स के साथ काम करता है।

धाराओं का उपयोग करना:

public String method(String str) {
    return str.codePoints()
            .limit(str.codePoints().count() - 1)
            .mapToObj(i->new String(Character.toChars(i)))
            .collect(Collectors.joining());
}

अधिक कुशल हो सकता है:

public String method(String str) {
    return str.isEmpty()? "": str.substring(0, str.length() - Character.charCount(str.codePointBefore(str.length())));
}

0

हम प्रतिस्थापन का उपयोग कर सकते हैं। यहाँ उदाहरण है,

public class RemoveStringChar 
{
    public static void main(String[] args) 
    {   
        String strGiven = "Java";
        System.out.println("Before removing string character - " + strGiven);
        System.out.println("After removing string character - " + removeCharacter(strGiven, 3));
    }

    public static String removeCharacter(String strRemove, int position)
    {   
        return strRemove.substring(0, position) + strRemove.substring(position + 1);    
    }
}


0

मान लीजिए कि मेरे तार की कुल लंबाई = 24 मैं स्थिति 14 के अंत के बाद अंतिम चरित्र में कटौती करना चाहता हूं, इसका मतलब है कि मैं 14 को शुरू करना चाहता हूं। इसलिए मैं निम्नलिखित समाधान लागू करता हूं।

String date = "2019-07-31T22:00:00.000Z";
String result = date.substring(0, date.length() - 14);

0

मुझे इसी तरह की समस्या के लिए कोड लिखना था। एक तरीका जिससे मैं इसे हल करने में सक्षम था, कोडिंग की एक पुनरावर्ती विधि का उपयोग किया।

static String removeChar(String word, char charToRemove)
{
    for(int i = 0; i < word.lenght(); i++)
    {
        if(word.charAt(i) == charToRemove)
        {
            String newWord = word.substring(0, i) + word.substring(i + 1);
            return removeChar(newWord, charToRemove);
        }
    }

    return word;
}

इस विषय पर मैंने जो कोड देखे हैं उनमें से अधिकांश में पुनरावृत्ति का उपयोग नहीं किया गया है, इसलिए उम्मीद है कि मैं आपकी या किसी ऐसे व्यक्ति की मदद कर सकता हूं, जिनके पास एक ही समस्या है।


0

बहुत आसान:

StringBuilder sb= new StringBuilder();
for(Entry<String,String> entry : map.entrySet()) {
        sb.append(entry.getKey() + "_" + entry.getValue() + "|");
}
String requiredString = sb.substring(0, sb.length() - 1);

-1

यह स्ट्रिंग में अंतिम वर्ण को निकालने का एक तरीका है:

Scanner in = new Scanner(System.in);
String s = in.nextLine();
char array[] = s.toCharArray();
int l = array.length;
for (int i = 0; i < l-1; i++) {
    System.out.print(array[i]);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.