एक स्ट्रिंग से अंतिम चरित्र ट्रिम करें


157

मेरे पास एक स्ट्रिंग है

"Hello! world!" 

मैं एक ट्रिम या बाहर निकालने के लिए करना चाहता हूँ! ऑफ वर्ल्ड लेकिन ऑफ हैलो नहीं।


1
हो सकता है कि यह आपके अनुरोध से परे हो, लेकिन क्या मैं आपके द्वारा प्रस्तावित रेगेक्स का उपयोग करने के बारे में सोचने के लिए कुछ समय ले सकता हूं?
मार्सेलो फागे

जवाबों:


298
"Hello! world!".TrimEnd('!');

अधिक पढ़ें

संपादित करें:

मैंने इस प्रकार के प्रश्नों पर ध्यान दिया है जो सभी को दिए गए स्ट्रिंग के अंतिम चार्ट को हटाने का सुझाव देते हैं। लेकिन यह ट्रिम विधि की परिभाषा को पूरा नहीं करता है।

ट्रिम - इस उदाहरण की शुरुआत और अंत से सफेद अंतरिक्ष वर्णों की सभी घटनाओं को हटाता है।

MSDN-ट्रिम

इस परिभाषा के तहत केवल अंतिम चरित्र को स्ट्रिंग से हटाना खराब समाधान है।

इसलिए यदि हम "स्ट्रिंग से अंतिम चरित्र को ट्रिम करना चाहते हैं" तो हमें कुछ इस तरह करना चाहिए

विस्तार विधि के रूप में उदाहरण:

public static class MyExtensions
{
  public static string TrimLastCharacter(this String str)
  {
     if(String.IsNullOrEmpty(str)){
        return str;
     } else {
        return str.TrimEnd(str[str.Length - 1]);
     }
  }
}

ध्यान दें कि यदि आप समान मान के सभी वर्णों को हटाना चाहते हैं (!!!!) तो उपरोक्त विधि '' की सभी मौजूदगी को हटा देती है! स्ट्रिंग के अंत से, लेकिन यदि आप केवल अंतिम वर्ण को निकालना चाहते हैं, तो आपको इसका उपयोग करना चाहिए:

else { return str.Remove(str.Length - 1); }

1
यह तब तक बेहतर है जब तक आप हमेशा जानते हैं कि आप किस चरित्र को स्ट्रिंग के अंत से निकालना चाहते हैं।
निमरोड शोरि

1
हाय वश, आप एक RegEx का उपयोग करके मेरे समाधान के बारे में क्या सोचते हैं? यह थ्रक के अनुरोध को पूरा करता है और यह 'को दूर करने की अनुमति देता है!' किसी भी "दुनिया से!" अभिव्यक्ति, कहीं भी अभिव्यक्ति को रखा गया है, सिर्फ एक कोड लाइन में।
मार्सेलो फागे

24
-1 इस समाधान से सभी समान अक्षर समाप्त हो जाएंगे! जैसे यह "हैलो !!!!!!!!" होगा "हैलो" में, जो अंतिम चरित्र को अधिक हटा रहा है।
कुगेल

1
@Kugel, आप पूरी तरह से सही हैं, और यही कारण है कि आपको एक बार मेरे उत्तर को पढ़ना चाहिए। स्पष्टीकरण के लिए ओपी यह नहीं पूछता कि अंतिम चरित्र को कैसे हटाया जाए, लेकिन इसे कैसे ट्रिम किया जाए।
डेमियन लेस्ज़्ज़स्की - वश

1
@Vash - आप विधि का उपयोग करके एक उद्धरण कैसे निकालते हैं - "हैलो! दुनिया!"। TrimEnd ('!')।
भाप

65
String withoutLast = yourString.Substring(0,(yourString.Length - 1));

14
बस सुनिश्चित करें कि आपके स्ट्रिंग में कम से कम 1 वर्ण हो।
निमरोड शोरि

यह भी सुनिश्चित करें कि आपका स्ट्रिंग हमेशा उस चरित्र में समाप्त होता है जिसे आप ईजी को हटाना चाहते हैं: "हैलो! वर्ल्ड" को "द-वर्ल" के रूप में समाप्त होगा।
नाथन कोप

9
if (yourString.Length > 1)
    withoutLast = yourString.Substring(0, yourString.Length - 1);

या

if (yourString.Length > 1)
    withoutLast = yourString.TrimEnd().Substring(0, yourString.Length - 1);

... यदि आप अंत से एक गैर-व्हाट्सएप चरित्र को हटाना चाहते हैं।


9
मैं केवल एक टिप्पणी के बिना चढ़ाव को ऑफसेट करने के लिए upvoted। नफरत है जब लोग ऐसा करते हैं।
जेफ रेड्डी

2
यह हो सकता है क्योंकि वहाँ कोई TrimEnd()विधि नहीं है और अगर वहाँ थे, तो यह Substring(..)छोटे तारों पर बाद की कॉल को विफल कर सकता है ।
रॉरी

7
        string s1 = "Hello! world!";
        string s2 = s1.Trim('!');

संपत्ति के साथ कैसे काम करें? यह यहाँ इस्तेमाल किया जा सकता है?
userAZLogicApps

1
ट्रिम () इतनी बुरी तरह से नामित है। यह सभी प्रमुख और अनुगामी पात्रों (बहुवचन) को ट्रिम करता है, जैसा कि TrimStart () और TrimEnd ()
एंटनी बूथ


5
string helloOriginal = "Hello! World!";
string newString = helloOriginal.Substring(0,helloOriginal.LastIndexOf('!'));

5

एक स्ट्रिंग से अंतिम चरित्र को ट्रिम करने का दूसरा उदाहरण :

string outputText = inputText.Remove(inputText.Length - 1, 1);

आप इसे एक विस्तार विधि में डाल सकते हैं और इसे अशक्त स्ट्रिंग आदि से रोक सकते हैं।



2

आप इसका उपयोग भी कर सकते हैं:

public static class Extensions
 {

        public static string RemovePrefix(this string o, string prefix)
        {
            if (prefix == null) return o;
            return !o.StartsWith(prefix) ? o : o.Remove(0, prefix.Length);
        }

        public static string RemoveSuffix(this string o, string suffix)
        {
            if(suffix == null) return o;
            return !o.EndsWith(suffix) ? o : o.Remove(o.Length - suffix.Length, suffix.Length);
        }

    }


1

@Damian Leszczy --ski - Vash का थोड़ा संशोधित संस्करण जो यह सुनिश्चित करेगा कि केवल एक विशिष्ट वर्ण हटा दिया जाएगा।

public static class StringExtensions
{
    public static string TrimLastCharacter(this string str, char character)
    {
        if (string.IsNullOrEmpty(str) || str[str.Length - 1] != character)
        {
            return str;
        }
        return str.Substring(0, str.Length - 1);
    }
}

0

मैंने केवल ट्रिमएंड का उपयोग करके एक्सटेंशन लिखने का रास्ता अपनाया क्योंकि मैं पहले से ही इनलाइन का उपयोग कर रहा था और इससे खुश था ... (यानी:

static class Extensions
{
        public static string RemoveLastChars(this String text, string suffix)
        {            
            char[] trailingChars = suffix.ToCharArray();

            if (suffix == null) return text;
            return text.TrimEnd(trailingChars);
        }

}

सुनिश्चित करें कि आप स्थैतिक वर्ग का उपयोग करके अपनी कक्षाओं में नाम स्थान शामिल करें, पी और उपयोग है:

string _ManagedLocationsOLAP = string.Empty;
_ManagedLocationsOLAP = _validManagedLocationIDs.RemoveLastChars(",");          

0

इसे सरल बनाने के लिए एक उदाहरण एक्सटेंशन क्लास: -

internal static class String
{
    public static string TrimEndsCharacter(this string target, char character) => target?.TrimLeadingCharacter(character).TrimTrailingCharacter(character);
    public static string TrimLeadingCharacter(this string target, char character) => Match(target?.Substring(0, 1), character) ? target.Remove(0,1) : target;
    public static string TrimTrailingCharacter(this string target, char character) => Match(target?.Substring(target.Length - 1, 1), character) ? target.Substring(0, target.Length - 1) : target;

    private static bool Match(string value, char character) => !string.IsNullOrEmpty(value) && value[0] == character;
}

प्रयोग

"!Something!".TrimLeadingCharacter('X'); // Result '!Something!' (No Change)
"!Something!".TrimTrailingCharacter('S'); // Result '!Something!' (No Change)
"!Something!".TrimEndsCharacter('g'); // Result '!Something!' (No Change)

"!Something!".TrimLeadingCharacter('!'); // Result 'Something!' (1st Character removed)
"!Something!".TrimTrailingCharacter('!'); // Result '!Something' (Last Character removed)
"!Something!".TrimEndsCharacter('!'); // Result 'Something'  (End Characters removed)

"!!Something!!".TrimLeadingCharacter('!'); // Result '!Something!!' (Only 1st instance removed)
"!!Something!!".TrimTrailingCharacter('!'); // Result '!!Something!' (Only Last instance removed)
"!!Something!!".TrimEndsCharacter('!'); // Result '!Something!'  (Only End instances removed)

-5

यदि आप 'को हटाना चाहते हैं!' एक विशिष्ट अभिव्यक्ति (आपके मामले में "दुनिया") से चरित्र, तो आप इस नियमित अभिव्यक्ति का उपयोग कर सकते हैं

string input = "Hello! world!";

string output = Regex.Replace(input, "(world)!", "$1", RegexOptions.Multiline | RegexOptions.Singleline);

// result: "Hello! world"

$ 1 विशेष चरित्र में सभी मिलान "दुनिया" अभिव्यक्तियाँ शामिल हैं, और इसका उपयोग मूल "दुनिया" को बदलने के लिए किया जाता है! अभिव्यक्ति

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.