C # में एक स्ट्रिंग से अंतिम वर्ण निकालें। एक सुंदर तरीका है?


84

मेरे पास इस तरह एक संख्यात्मक स्ट्रिंग है 2223,00। मैं इसे बदलना चाहूंगा 2223। यह है: " , " के बाद की जानकारी के बिना । मान लें कि " , " के बाद केवल दो दशमलव होंगे ।

मैंने किया:

str = str.Remove(str.Length - 3, 3);

क्या अधिक सुरुचिपूर्ण समाधान है? शायद एक और समारोह का उपयोग कर? -मैं स्पष्ट संख्या डालने की तरह नहीं है-

जवाबों:


173

आप वास्तव में केवल एक पैरामीटर लेने वाले ओवरलोड को हटा सकते हैं:

str = str.Remove(str.Length - 3);

हालाँकि, यदि आप लम्बाई की हार्ड कोडिंग से बचने की कोशिश कर रहे हैं, तो आप इसका उपयोग कर सकते हैं:

str = str.Remove(str.IndexOf(','));

मुझे बहुत अच्छे जवाब मिले। लेकिन यह वह है जिसे मैं लालित्य के संदर्भ में उपयोग करूंगा। फिर भी, मुझे पता नहीं है, निम्न स्तर में , कौन सा अधिक कुशल है। तो, अपनी पसंद बनाओ!
कानि

6
दूसरा समाधान रास्ता पढ़ना, समझना और बनाए रखना आसान है, और निम्न स्तर के प्रदर्शन के मामले में , अंतर अविश्वसनीय रूप से महत्वहीन है। यदि आप जानते हैं कि ,हमेशा स्थिति -3 पर है, तो पहला समाधान अभी भी ठीक है, लेकिन समय से पहले अनुकूलन आपके समय को बर्बाद करने के लिए एक भयानक बात है।
स्कॉट रिपी

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

मान लीजिए आप चाहते हैं कि यदि कोई अल्पविराम नहीं है तो स्ट्रिंग को अनमॉडिफ़ाइड किया जाए?
काइल डेलाने

15

शायद यह:

str = str.Split(",").First();

मुझे लगता है कि यह उत्तरों का "सबसे सुरुचिपूर्ण" है - कम से कम अब तक।
टॉम बुशेल

1
आप @ ReedCopsey के बारे में क्या बात करते हैं? मुझे लगता है कि यह बहुत अच्छा है।
कानि

@ कानी: लालित्य के संदर्भ में मुझे लगता है कि अधिकांश उत्तर काफी अच्छे पोस्ट किए गए हैं । मैं या तो प्रदर्शन से परेशान नहीं होता, जब तक कि यह वास्तव में अड़चन साबित न हो। केवल एक बात पर विचार करें कि आप विभिन्न प्रारूप में आने वाले तारों से कैसे निपटना चाहते हैं ...
किमी

का एक दूसरा तर्क गुजर पर विचार 2करने के लिए Splitहै क्योंकि आप किसी भी आगे के लिए अल्पविराम के बारे में परवाह नहीं है।
रिचर्ड

5

यह आपको कॉमा के बाद सब कुछ छोड़कर एक स्ट्रिंग पर लौटेगा

str = str.Substring(0, str.IndexOf(','));

बेशक, यह मानता है कि आपके तार में वास्तव में दशमलव के साथ एक अल्पविराम है। यदि यह नहीं है तो उपरोक्त कोड विफल हो जाएगा। आप अधिक जांच करना चाहते हैं:

commaPos = str.IndexOf(',');
if(commaPos != -1)
    str = str.Substring(0, commaPos)

मैं मान रहा हूं कि आप शुरुआत करने के लिए एक स्ट्रिंग के साथ काम कर रहे हैं। आदर्श रूप से, यदि आप एक संख्या के साथ काम कर रहे हैं, जैसे कि एक फ्लोट या डबल, आप इसे केवल एक में डाल सकते हैं int, तो इसे myInt.ToString()पसंद करें:

myInt = (int)double.Parse(myString)

यह वर्तमान संस्कृति (यहां अमेरिका में, हम .दशमलव बिंदुओं के लिए उपयोग करते हैं) का उपयोग करके डबल को पार्स करते हैं । हालाँकि, यह फिर से मानता है कि आपके इनपुट स्ट्रिंग को पार्स किया जा सकता है।


3
String.Format("{0:0}", 123.4567);      // "123"

यदि आपका प्रारंभिक मूल्य एक स्ट्रिंग में एक दशमलव है, तो आपको परिवर्तित करने की आवश्यकता होगी

String.Format("{0:0}", double.Parse("3.5", CultureInfo.InvariantCulture))  //3.5

इस उदाहरण में, मैं Invariant कल्चर चुनता हूं लेकिन आप जो चाहते हैं उसका उपयोग कर सकते हैं।

मैं स्वरूपण फ़ंक्शन का उपयोग करना पसंद करता हूं क्योंकि आप कभी नहीं जानते कि दशमलव में भविष्य में 2 या 3 अग्रणी संख्या हो सकती है।

संपादित करें: आप Truncateसभी को हटाने के लिए उपयोग कर सकते हैं , या।

Console.WriteLine(Decimal.Truncate(Convert.ToDecimal("3,5")));

खैर, मैं इस मामले में एक ही नंबर प्राप्त कर रहा हूं, इस पर कोमा को सफेद कर रहा हूं ।
कानी

आपके द्वारा उपयोग की जाने वाली सटीक स्ट्रिंग क्या है और आपका कंप्यूटर किस संस्कृति का है?
पैट्रिक डेसजार्डिन्स 19

जैसे उदाहरण में: dddd, dd , जहां d एक अंक है। दशमलव के बाद कर रहे हैं , इस मामले में। मैं कुछ परिणामों को मानकीकृत कर रहा हूं, हटा रहा हूं और , या, या का उपयोग कर इसके बजाय ,
Kani

मुझे नहीं पता कि मैं स्ट्रिंग का उपयोग करूंगा। इसे व्यक्तिगत रूप से करने के लिए। जब यह काम करता है, तो यह स्ट्रिंग के पास जाने से पहले डबल बॉक्सिंग को हवा देता है। इस प्रकार, एक अतिरिक्त ऑब्जेक्ट बनाता है।
क्रिस्टोफर Currens

मेरा कहना है कि मुझे नहीं पता है कि स्ट्रिंग (विकल्प) या बॉक्सिंग के साथ खेलने के बीच प्रदर्शन के मामले में बेहतर क्या है। मुझे नहीं लगता कि यह वास्तव में महत्वपूर्ण है अगर इसका गहन उपयोग नहीं किया जाता है। स्थिति पर निर्भर :)
पैट्रिक डेसजार्डिन

1

उपयोग:

public static class StringExtensions
{
    /// <summary>
    /// Cut End. "12".SubstringFromEnd(1) -> "1"
    /// </summary>
    public static string SubstringFromEnd(this string value, int startindex)
    {
        if (string.IsNullOrEmpty(value)) return value;
        return value.Substring(0, value.Length - startindex);
    }
}

मैं दो कारणों से यहां एक एक्सटेंशन विधि पसंद करता हूं:

  1. मैं इसे सबस्ट्रिंग के साथ चेन कर सकता हूं। Example: f1.Substring(directorypathLength).SubstringFromEnd(1)
  2. स्पीड।

1

आप लास्टइंडैक्सऑफ का उपयोग कर सकते हैं और स्टिंग के भीतर कॉमा के आखिरी इंडेक्स के बाईं ओर सभी पात्रों को प्राप्त करने के लिए संयुक्त पदार्थ का उपयोग कर सकते हैं।

string var = var.Substring (0, var.LastIndexOf (','));


0

आप उपयोग कर सकते हैं TrimEnd। यह कुशल है और साफ दिखता है।

"Name,".TrimEnd(',');

4
यह केवल किसी भी ',' वर्णों को हटा देगा जो स्ट्रिंग के अंत में हैं। चूंकि स्ट्रिंग "123,45" अंकों के साथ समाप्त होती है, "123,45".TrimEnd(',')"123,45" वापस आ जाएगी।
18

Remove last characters from a string if this character is... बस मुझे अच्छी तरह से फिट बैठता है। की सराहना की। "oppa/ ".Trim().TrimEnd('/');
it3xl


-3

LastIndexOf का उपयोग करें। पसंद:

string var = var.lastIndexOf(',');

var एक वेरिएबल नाम है। इसे कभी भी एक स्ट्रिंग के नाम के रूप में उपयोग नहीं किया जाना चाहिए। -1; इसके अतिरिक्त यह केवल सूचकांक देता है, इसलिए यह केवल समस्या का हिस्सा हल करता है। आपको निकालें () की आवश्यकता है।
पैट्रिक नॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.