मैं जावा में लंबाई 0 के साथ स्ट्रिंग सरणी कैसे शुरू कर सकता हूं?


133

विधि के लिए जावा डॉक्स
String[] java.io.File.list(FilenameFilter filter)
रिटर्न विवरण में इसे शामिल करता है:

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

मैं एक समान काम कैसे करूं और एक स्ट्रिंग सरणी (या उस मामले के लिए किसी भी अन्य सरणी) की लंबाई 0 करने के लिए आरंभ करूं?


7
मुझे बस एहसास हुआ कि यह एक मूर्खतापूर्ण प्रश्न है :( जैसा कि इन सरणियों को ठीक उसी तरह से आरम्भ किया गया है जैसे किसी आकार के साथ कोई अन्य सरणी। 0. दिखाता है कि मैं आजकल सरणियों को कितनी बार आरंभ करता हूं। मैं किसी दिन प्रश्न को हटा दूंगा (इसे हटा नहीं)। किसी और के रूप में मैं बस अब था के रूप में बेवकूफ हो सकता है :)
रॉन Tuffin

1
मैं इस बात को लेकर असमंजस में हूँ कि आपके पास 0 की लंबाई के लिए कौन सा उपयोग मामला होगा, और आप nullउस विशेष मामले में सीधे तौर पर इनवाइट क्यों नहीं करेंगे ।
ब्लेक

जवाबों:


230

जैसा कि दूसरों ने कहा है,

new String[0]

वास्तव में एक खाली सरणी बनाएगा। हालांकि, सरणियों के बारे में एक अच्छी बात है - उनका आकार नहीं बदल सकता है, इसलिए आप हमेशा एक ही खाली सरणी संदर्भ का उपयोग कर सकते हैं। तो आपके कोड में, आप उपयोग कर सकते हैं:

private static final String[] EMPTY_ARRAY = new String[0];

और फिर EMPTY_ARRAYहर बार जब आपको इसकी आवश्यकता हो तो वापस लौटाएं - हर बार एक नई वस्तु बनाने की कोई आवश्यकता नहीं है।


7
ऐसा लगता है कि हर कोई टाइपिंग पसंद करता है:private static final String[] EMPTY_ARRAY = {};
थॉमस जुंग

8
@ थोमस: मैं आपकी बात लेता हूं, लेकिन इस विशेष मामले के लिए मैं अधिक स्पष्ट रूप को पसंद करता हूं। यह मेरे लिए स्पष्ट है कि इसका अर्थ है "मुझे" इस सामग्री के साथ एक सरणी चाहिए - जो खाली है "के बजाय" 0 तत्वों के साथ एक स्ट्रिंग सरणी चाहिए "। बस व्यक्तिगत पसंद मुझे लगता है।
जॉन स्कीट

1
@ टोनी - मुझे उन कुछ स्थानों का उपयोग करना होगा जहां जावा एक प्रकार का अनुमान लगा सकता है। :-)
थॉमस जुंग

1
@delive: मैंने जो उदाहरण दिया है, वह अभी भी एक खाली सरणी बनाएगा, लेकिन क्योंकि यह खाली है, आप उपयोग नहीं कर सकते हैं EMPTY_ARRAY[0]- जो कि तत्व 0 को एक्सेस करने की कोशिश कर रहा है, जो मौजूद नहीं है ...
जॉन स्कीट

1
@theyuv: अंततः यह बात नहीं जा रहा है। यदि आपको केवल एक ही स्थान पर इसकी आवश्यकता है, तो इसे उस कक्षा में घोषित करें। यदि आपको लगता है कि आपको इसकी आवश्यकता अधिक स्थानों पर है, तो आप इसे हमेशा "उपयोगिता" वर्ग में ले जा सकते हैं।
जॉन स्कीट


18
String[] str = {};

परंतु

return {};

टाइप जानकारी गुम होने पर काम नहीं करेगा।


10
return new String[] { };और return new String[0];दोनों काम करेंगे।
बॉम्बे

13

ठीक है, मुझे वास्तव में जवाब मिला लेकिन मुझे लगा कि मैं एसओ में सवाल को 'आयात' करूंगा

String[] files = new String[0];
या
int[] files = new int[0];


अपने प्रश्न में ऐसी टिप्पणी जोड़ें ... या उन उत्तरों में से एक का चयन करें जो एक ही बात कहे।
जोनाथन लेफ़लर

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

2

आप org.apache.commons.lang3 से ArrayUtils.EMPTY_STRING_ARRAY का उपयोग कर सकते हैं

import org.apache.commons.lang3.ArrayUtils;

    class Scratch {
        public static void main(String[] args) {
            String[] strings = ArrayUtils.EMPTY_STRING_ARRAY;
        }
    }

0

एक फ़ंक्शन बनाएं जो खाली नहीं लौटेगा बजाय एक खाली सरणी लौटाए जिसे समझने के लिए आप नीचे दिए गए कोड के माध्यम से जा सकते हैं।

    public static String[] getJavaFileNameList(File inputDir) {
    String[] files = inputDir.list(new FilenameFilter() {
        @Override
        public boolean accept(File current, String name) {
            return new File(current, name).isFile() && (name.endsWith("java"));
        }
    });

    return files == null ? new String[0] : files;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.