.NET निश्चित स्थानों के साथ एक स्ट्रिंग प्रारूपित करें


199

क्या .NET String.Format विधि एक निश्चित लंबाई की स्ट्रिंग के भीतर एक निश्चित स्थान पर एक स्ट्रिंग की नियुक्ति की अनुमति देती है।

"स्ट्रिंग यहाँ जाता है"
"स्ट्रिंग यहाँ जाता है"
"स्ट्रिंग यहाँ जाता है"

यह .NET का उपयोग करके कैसे किया जाता है?

संपादित करें - मैंने मौत के लिए प्रारूप / PadLeft / PadRight की कोशिश की है। वो काम नहीं करते हैं। मुझे पता नहीं क्यों। मैंने ऐसा करने के लिए अपना स्वयं का फ़ंक्शन लिखना समाप्त कर दिया।

संपादित करें - मैंने गलती की और प्रारूप विनिर्देशक में अल्पविराम के बजाय एक बृहदान्त्र का उपयोग किया। "{0,20}" होना चाहिए।

उत्कृष्ट और सही उत्तर के सभी के लिए धन्यवाद।


48
मेरे पास कभी भी एक स्ट्रिंग प्रारूपण वाला प्रश्न नहीं है जिसका उत्तर मैं इस पृष्ठ पर जाकर नहीं दे सकता: blog.stevex.net/index.php/string-formatting-in-csharp
jcollum

@ जुल्म: मुझे आपके जवाब को वोट देना अच्छा लगेगा लेकिन टिप्पणियों के लिए कोई नहीं कर सकता है
दीना

PadLeft मेरे लिए यह जाँचने का काम करता है कि आप PadLeft (20, 'यहाँ आता है एक स्पेस' में जगह छोड़ रहे हैं)
जेडी मास्टर स्पूकी

"अंतरिक्ष छोड़ने" से क्या मतलब है। यदि आपका मतलब है - क्या मैं स्ट्रिंग को "ट्रिमिंग" कर रहा हूं, तो नहीं। यह अभी भी काम नहीं करता है।
user72491

जवाबों:


473

यह आपको वे तार देगा जो आपने मांगे थे:

string s = "String goes here";
string lineAlignedRight  = String.Format("{0,27}", s);
string lineAlignedCenter = String.Format("{0,-27}",
    String.Format("{0," + ((27 + s.Length) / 2).ToString() +  "}", s));
string lineAlignedLeft   = String.Format("{0,-27}", s);

64
इसे प्रश्न के सही उत्तर के रूप में चिह्नित किया जाना चाहिए, लेकिन ऐसा लगता है कि ओपी ने स्टैकओवरफ्लो छोड़ दिया है।
ओलिवर

9
यदि आप हरे चेक बनाम उच्चतम वोटों की तलाश करते हैं, तो आप एसओ को नहीं जानते;)
डेव जेलिसन

2
@DaveJellison ऐसा लगता है कि किसी को इसे ठीक करने के लिए एक प्लगइन लिखने की ज़रूरत है, या SO को इसे एक विन्यास योग्य उपयोगकर्ता वरीयता देना चाहिए।
वाल्टर स्टबोज़

1
@AlterStabosz अधिक सहमत नहीं हो सका।
डेव जेलिसन

2
यह अन्य सभी स्वरूपण usecases ,की :तरह के साथ क्यों किया जाता है ?
LuckyLikey

65

पहला और अंतिम, कम से कम, निम्नलिखित सिंटैक्स का उपयोग करना संभव है:

String.Format("{0,20}", "String goes here");
String.Format("{0,-20}", "String goes here");

49

विजुअल स्टूडियो 2015 के अनुसार आप इसे इंटरपोलेटेड स्ट्रिंग्स (इसकी एक कंपाइलर ट्रिक) के साथ भी कर सकते हैं , इसलिए यह आपके द्वारा लक्षित नेट फ्रेमवर्क के संस्करण से कोई फर्क नहीं पड़ता)।

string value = "String goes here";
string txt1 = $"{value,20}";
string txt2 = $"{value,-20}";

9
इसकी एसी # 6 सुविधा।
LuckyLikey

मैं वर्षों से C # 6 का उपयोग कर रहा हूं और यह नहीं जानता कि एक! Upvoted :)
Avrohom Yisroel

17

आप दिखाया गया है PadLeftऔर PadRight। यह लापता में भर जाएगा PadCenter

public static class StringUtils
{
    public static string PadCenter(this string s, int width, char c)
    {
        if (s == null || width <= s.Length) return s;

        int padding = width - s.Length;
        return s.PadLeft(s.Length + padding / 2, c).PadRight(width, c);
    }
}

स्वयं पर ध्यान दें: स्वयं सीवी अपडेट करना न भूलें: "एक दिन, मैंने जोएल कोएहॉर्न का कोड भी तय किया!" ; -द -सर्ज


जोएल, अच्छा स्निपेट - मैं इसका उपयोग करने की कोशिश कर रहा हूं और यह काफी केंद्र नहीं है, जिस तरह से यह है। ऐसा लगता है कि रिटर्न लाइन कुछ इस तरह होनी चाहिए (मेरे पास संपादित करने के लिए पर्याप्त प्रतिनिधि नहीं है ...): रिटर्न s.PadLeft ((पैडिंग / 2) + s.Length, c)। IPadRight (चौड़ाई, c);
शॉनमार्टिन

11

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

"String goes here".PadLeft(20,' ');
"String goes here".PadRight(20,' ');

केंद्र के लिए स्ट्रिंग की लंबाई प्राप्त करें और आवश्यक वर्णों के साथ पैडलेफ्ट और पैडराइट करें

int len = "String goes here".Length;
int whites = len /2;
"String goes here".PadRight(len + whites,' ').PadLeft(len + whites,' ');

String.Format () कॉल की तरह लगता है शानदार है।
जोएल कोएहॉर्न

पैड तरीकों अच्छा के बाद से प्रारूप विकल्पों लंबाई की आवश्यकता होती है स्थिरांक होने के लिए (है कि कर रहे हैं, String.Format("{0,-length}", something)संकलन नहीं होंगे।
रॉबर्टो

6

चर्चा के लिए धन्यवाद, यह विधि भी काम करती है (VB):

Public Function StringCentering(ByVal s As String, ByVal desiredLength As Integer) As String
    If s.Length >= desiredLength Then Return s
    Dim firstpad As Integer = (s.Length + desiredLength) / 2
    Return s.PadLeft(firstpad).PadRight(desiredLength)
End Function
  1. StringCentering () दो इनपुट मान लेता है और यह एक स्वरूपित स्ट्रिंग लौटाता है।
  2. जब s की लंबाई deisredLength की तुलना में अधिक या बराबर होती है , तो फ़ंक्शन मूल स्ट्रिंग लौटाता है।
  3. जब s की लम्बाई वांछित लंबाई से छोटी हो , यह दोनों सिरों गद्देदार कर दिया जाएगा।
  4. वर्ण अंतर के कारण पूर्णांक है और कोई अर्ध-स्थान नहीं है, हमारे पास अंतरिक्ष का असमान विभाजन हो सकता है। इस कार्यान्वयन में, बड़ा विभाजन अग्रणी छोर पर जाता है।
  5. PadLeft () और PadRight () के कारण फ़ंक्शन को .NET फ्रेमवर्क की आवश्यकता होती है
  6. फ़ंक्शन की अंतिम पंक्ति में, बाइंडिंग बाएं से दाएं होती है, इसलिए फर्स्टपैड को वांछित लेलेंड पैड के बाद लागू किया जाता है ।

यहाँ C # संस्करण है:

public string StringCentering(string s, int desiredLength)
{
    if (s.Length >= desiredLength) return s;
    int firstpad = (s.Length + desiredLength) / 2;
    return s.PadLeft(firstpad).PadRight(desiredLength);
}

समझ में सहायता करने के लिए, पूर्णांक चर प्रथमपाद का उपयोग किया जाता है। s.PadLeft (firstpad ) प्रमुख सफेद रिक्त स्थान पर (सही संख्या में) लागू होता है। सही-सबसे PadRight (वांछितLLength) सफेद रिक्त स्थान लागू करके एक कम बाध्यकारी खत्म होता है।


1
एसओ, ची में आपका स्वागत है। यह एक महान पहली पोस्ट और जवाब का एक और उदाहरण है। +1
ब्रायन

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

1

यहां मैंने एक VB.NET संस्करण बनाया है, जोएल कोएहॉर्न के जवाब से प्रेरित है, ओलिवर का संपादन, और शॉनमार्टिन की टिप्पणी:

    <Extension()>
Public Function PadCenter(ByVal [string] As String, ByVal width As Integer, ByVal c As Char) As String

    If [string] Is Nothing Then [string] = String.Empty
    If (width <= [string].Length) Then Return [string]

    Dim padding = width - [string].Length
    Return [string].PadLeft([string].Length + (padding \ 2), c).PadRight(width, c)

End Function

<Extension()>
Public Function PadCenter(ByVal [string] As String, ByVal width As Integer) As String

    If [string] Is Nothing Then [string] = String.Empty
    If (width <= [string].Length) Then Return [string]

    Dim padding = width - [string].Length
    Return [string].PadLeft([string].Length + (padding \ 2)).PadRight(width)

End Function

इसे एक सार्वजनिक मॉड्यूल के अंदर एक स्ट्रिंग एक्सटेंशन के रूप में सेट किया गया है (जिस तरह से आप VB.NET में एक्सटेंशन करते हैं, # # से थोड़ा अलग)। मेरा मामूली परिवर्तन यह है कि यह एक रिक्त स्ट्रिंग के रूप में एक अशक्त स्ट्रिंग को मानता है, और यह चौड़ाई मान के साथ एक रिक्त स्ट्रिंग को पैड करता है (मेरी विशेष आवश्यकताओं को पूरा करता है)। उम्मीद है कि यह आसानी से सी # में परिवर्तित हो जाएगा जो किसी के लिए इसकी आवश्यकता है। यदि मेरे द्वारा बताए गए उत्तर, संपादन, और टिप्पणियों का संदर्भ देने का एक बेहतर तरीका है, जिसने मेरी पोस्ट को प्रेरित किया है, तो कृपया मुझे बताएं और मैं इसे करूंगा - मैं पोस्ट करने के लिए अपेक्षाकृत नया हूं, और मैं इसका पता नहीं लगा सका एक टिप्पणी छोड़ दो (अभी तक पर्याप्त प्रतिनिधि नहीं हो सकता है)।


0

मैंने एक CodeProject लेख पोस्ट किया है जो आप चाहते हैं।

देखें: अप्रत्यक्ष चौड़ाई और शैली प्रारूपण के लिए एसी # रास्ता।

मूल रूप से यह एक विधि है, FormatEx, जो String.Format की तरह कार्य करता है, सिवाय इसके कि यह एक संरेखित संरेखण संशोधक की अनुमति देता है।

FormatEx("{0,c10}", value);

इसका मतलब है कि 10 वर्णों के विस्तृत क्षेत्र में varArgs [0] का मान केन्द्रित होता है, यदि अतिरिक्त पैडिंग स्थान की आवश्यकता होती है, तो सही है।

FormatEx("{0,c-10}", value);

इसका मतलब है कि 10 वर्णों के विस्तृत क्षेत्र में varArgs [0] का मान केन्द्रित होता है, यदि अतिरिक्त पैडिंग स्थान की आवश्यकता हो तो दुबला छोड़ दिया जाता है।

संपादित करें: आंतरिक रूप से, यह जोएल के पैडकेंटर का एक संयोजन है, जिसमें कुछ स्ट्रिंग के लिए प्रारूप और varArgs को एक कॉल के लिए String.Format से जोड़ा जाता है, जो आपको चाहिए।

-Jesse


-1

ऐसा लगता है जैसे आप कुछ ऐसा चाहते हैं, जो आपको लगातार लम्बाई में एक निश्चित बिंदु पर स्ट्रिंग करेगा:

Dim totallength As Integer = 100
Dim leftbuffer as Integer = 5
Dim mystring As String = "string goes here"
Dim Formatted_String as String = mystring.PadLeft(leftbuffer + mystring.Length, "-") + String.Empty.PadRight(totallength - (mystring.Length + leftbuffer), "-")

ध्यान दें कि यह समस्या होगी अगर मिस्ट्रिंग.लिफ्ट + वामबफ़र टोटल टेंपरेचर से अधिक हो


-7
/// <summary>
/// Returns a string With count chars Left or Right value
/// </summary>
/// <param name="val"></param>
/// <param name="count"></param>
/// <param name="space"></param>
/// <param name="right"></param>
/// <returns></returns>
 public static string Formating(object val, int count, char space = ' ', bool right = false)
{
    var value = val.ToString();
    for (int i = 0; i < count - value.Length; i++) value = right ? value + space : space + value;
    return value;
}

3
इस कोड का उपयोग न करें - यह बहुत सारे अनावश्यक स्ट्रिंग आवंटन उत्पन्न करता है। इसके बजाय बिल्ट प्रारूप विनिर्देशक और गद्दी विधियों का उपयोग करें।
ओस्कर बर्गग्रेन

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