2010-03-17 12 views
10

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

public static String concat(String str1, String str2) { 
    String rVal = null; 
    if (str1 != null || str2 != null) { 
    rVal = ""; 
    if (str1 != null) { 
     rVal += str1; 
    } 
    if (str2 != null) { 
     rVal += str2; 
    }  
    }  
    return rVal; 
} 

की आवश्यकताएं इस में से कुछ हैं:

  1. दोनों str1 और str2 अशक्त कर रहे हैं, विधि अशक्त
  2. या तो str1 या str2 रिक्त है तो देता है, यह सिर्फ रिक्त नहीं वापस आ जाएगी स्ट्रिंग
  3. str1 और str2 अशक्त नहीं कर रहे हैं, यह उन्हें
  4. जोड़ होगा यह कभी नहीं परिणाम
करने के लिए "अशक्त" कहते हैं

किसी को भी कम कोड के साथ ऐसा कर सकते हैं?

+0

अगर मैं str1.concat फोन (str2), यह एक NullPointerException फेंक होगा जब str1 रिक्त है। – Ryan

+0

तुम सिर्फ StringBuilder का उपयोग नहीं कर सकता है? – Ant

+0

@Ant मुझे यकीन है कि अशक्त मामलों बहुत अच्छी तरह से हैंडल नहीं कर रहा हूँ। – Ryan

उत्तर

13

ज़रूर:

public static String concat(String str1, String str2) { 
    return str1 == null ? str2 
     : str2 == null ? str1 
     : str1 + str2; 
} 

ध्यान दें कि यह पहली शर्त में "दोनों अशक्त" मामले का ख्याल रखता है: अगर str1 रिक्त है, तो आप या तो अशक्त लौटने के लिए (यदि str2 रिक्त है) चाहते हैं या str2 (यदि str2 अशक्त नहीं है) - इन दोनों का सिर्फ str2 वापस लौट कर नियंत्रित किया जाता है।

+3

नेस्टेड सशर्त ऑपरेटर? गंभीरता से? –

+2

कुछ इसे पढ़ सकते हैं, कुछ नहीं कर सकते हैं। यह शुरुआत करने वालों के लिए वास्तव में अधिक भ्रमित है। मैं उन्हें कोष्ठक के साथ एक ही पंक्ति में डाल दिया होगा। कुछ 'वापसी (str1 == शून्य) की तरह कुछ? str2: ((str2 == null)? str1: (str1 + str2)); ' – BalusC

+1

@ माइकल: बिल्कुल - मुझे इसे एक बहुत ही उपयोगी पैटर्न मिल जाता है जब आप वरीयता के साथ कई स्थितियों का परीक्षण करना चाहते हैं। –

15

केवल सादे if खंड का उपयोग करना:

public static String concat(String str1, String str2) { 
    if(str1==null) return str2; 
    if(str2==null) return str1; 
    return str1 + str2; 
} 

या, यदि आप कोष्ठकों के लिए एक गहरा और आवेशपूर्ण प्यार है:

public static String concat(String str1, String str2) { 
    if(str1==null) 
    { 
     return str2; 
    } 
    if(str2==null) 
    { 
     return str1; 
    } 
    return str1 + str2; 
} 
+0

आपको नेस्टेड सशर्त पसंद नहीं है - मुझे ब्रेसिज़ के बिना 'if' कथन पसंद नहीं है :) –

+0

@ जोन पहले थे, लेकिन कॉम्पैक्टनेस आईएमओ इस तरह के एक साधारण मामले में बेहतर है। –

+0

कम कोड अधिक पठनीय –

1
import org.apache.commons.lang.StringUtils; 

StringUtils.join([str1, str2]); 

एक एकल में प्रदान की सरणी के तत्वों में शामिल स्ट्रिंग जिसमें तत्वों की प्रदत्त सूची शामिल है।

कोई विभाजक में शामिल हो गए स्ट्रिंग में जोड़ा जाता है। सरणी के भीतर शून्य वस्तुओं या खाली तार खाली तारों द्वारा दर्शाए जाते हैं।

StringUtils.join(null)   = null 
StringUtils.join([])    = "" 
StringUtils.join([null])   = "" 
StringUtils.join(["a", "b", "c"]) = "abc" 
StringUtils.join([null, "", "a"]) = "a" 
+0

@ निशु यह करीब है, लेकिन स्ट्रै 1 और str2 दोनों शून्य दोनों के मामले में एक साधारण शून्य जांच की आवश्यकता है। – Ryan

0

प्रत्येक व्यक्ति को स्थिति 1 याद आती है जहां दोनों तार शून्य हो जाते हैं तो यह शून्य हो जाता है। सबसे सरल संस्करण को पढ़ने के लिए (IMO) तो हो जाता है:

public static String concat(String str1, String str2) { 
    if(str1==null && str2==null) return null; 
    if(str1==null) return str2; 
    if(str2==null) return str1; 
    return str1 + str2; 
} 
+0

मैं इसे वापस लेता हूं ... जॉन द्वारा पहला जवाब ... – Striker

+1

जॉन और माइकल के दोनों समाधान पहले शर्त पर वापस लौट आएंगे (अन्य स्ट्रिंग लौट रहे हैं, जो शून्य है) यदि दोनों स्ट्रिंग शून्य हैं। आपका बस एक अतिरिक्त अनावश्यक परीक्षण स्थिति जोड़ता है। – defectivehalt

0
public class ConcatTest extends TestCase { 

    // 1. If both str1 and str2 are null, the method returns null 
    public void testBothNull() throws Exception { 
     assertNull(concat(null, null)); 
    } 

    // 2. If either str1 or str2 is null, it will just return the not null 
    // String 
    public void testOneNull() throws Exception { 
     assertEquals("a", concat(null, "a")); 
     assertEquals("b", concat("b", null)); 
    } 

    // 3. If str1 and str2 are not null, it will concatenate them 
    public void testNonNull() throws Exception { 
     assertEquals("ab", concat("a", "b")); 
    } 

    // 4. It never adds "null" to the result (not really testable) 

    public static String concat(String a, String b) { 
     if (a == null && b == null) 
      return null; 
     return denulled(a) + denulled(b); 
    } 

    private static String denulled(String s) { 
     return s == null ? "" : s; 
    } 

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