मैं String[]
एक गोंद स्ट्रिंग के साथ जुड़ना चाहता हूं । क्या इसके लिए कोई फ़ंक्शन है?
मैं String[]
एक गोंद स्ट्रिंग के साथ जुड़ना चाहता हूं । क्या इसके लिए कोई फ़ंक्शन है?
जवाबों:
Java8 से शुरू करना संभव है String.join()
।
String.join(", ", new String[]{"Hello", "World", "!"})
उत्पन्न करता है:
Hello, World, !
अन्यथा, अपाचे कॉमन्स लैंग में एक StringUtils
वर्ग होता है जिसमें एक join
फ़ंक्शन होता है जो एक बनाने के लिए एक साथ सरणियों में शामिल होगा String
।
उदाहरण के लिए:
StringUtils.join(new String[] {"Hello", "World", "!"}, ", ")
निम्नलिखित उत्पन्न करता है String
:
Hello, World, !
String.join()
जावा 8 में शुरू की गई नई विधि के संदर्भ में संपादित करें । इस तरह, इस स्वीकृत उत्तर को पढ़ने वाले लोगों की भारी संख्या उस ज्ञान से लाभान्वित होगी। वर्तमान में, इस तथ्य का उल्लेख करने वाला सर्वोच्च मतदान उत्तर बल्कि नीचे खो गया है ...
String.join()
केवल List<CharSequence>
या CharSequence[]
तत्वों के लिए काम करेगा ।
यदि आप Android में क्या उपयोग करना चाहते हैं, तो यह है:
String android.text.TextUtils.join(CharSequence delimiter, Object[] tokens)
उदाहरण के लिए:
String joined = TextUtils.join(";", MyStringArray);
Java 8 में आप उपयोग कर सकते हैं
1) स्ट्रीम एपीआई:
String[] a = new String[] {"a", "b", "c"};
String result = Arrays.stream(a).collect(Collectors.joining(", "));
2) नई String.join विधि: https://stackoverflow.com/a/21756398/466677
3) java.util.StringJoiner वर्ग: http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html
आप इस तरह के फ़ंक्शन को लगभग दस लाइनों के कोड में आसानी से लिख सकते हैं:
String combine(String[] s, String glue)
{
int k = s.length;
if ( k == 0 )
{
return null;
}
StringBuilder out = new StringBuilder();
out.append( s[0] );
for ( int x=1; x < k; ++x )
{
out.append(glue).append(s[x]);
}
return out.toString();
}
सबस्ट्रिंग का उपयोग करने के बजाय थोड़ा मॉड ():
//join(String array,delimiter)
public static String join(String r[],String d)
{
if (r.length == 0) return "";
StringBuilder sb = new StringBuilder();
int i;
for(i=0;i<r.length-1;i++){
sb.append(r[i]);
sb.append(d);
}
sb.append(r[i]);
return sb.toString();
}
.append()
प्रत्येक के लिए दो बार उपयोग String
करने के बजाय उन्हें सुधारा जाए और फिर बिल्डर को जोड़ा जाए।
हाल ही में कई सवालों के साथ, बचाव के लिए जावा 8:
Java 8 ने एक नई स्टैटिक विधि जोड़ी, java.lang.String
जो वास्तव में आपको चाहिए
public static String join(CharSequence delimeter, CharSequence... elements);
उसका इस्तेमाल कर रहे हैं:
String s = String.join(", ", new String[] {"Hello", "World", "!"});
का परिणाम:
"Hello, World, !"
Google अमरूद की लाइब्रेरी में भी इस तरह की क्षमता है । आप स्ट्रिंग [] उदाहरण को एपीआई से भी देख सकते हैं।
जैसा कि पहले से ही एपी में वर्णित है, बिल्डर तरीकों की अपरिहार्यता से सावधान रहें।
यह वस्तुओं की एक सरणी को स्वीकार कर सकता है इसलिए यह आपके मामले में काम करेगा। अपने पिछले अनुभव में, मैंने एक स्टैक में शामिल होने की कोशिश की जो एक चलने योग्य है और यह ठीक काम करता है।
मुझ से नमूना:
Deque<String> nameStack = new ArrayDeque<>();
nameStack.push("a coder");
nameStack.push("i am");
System.out.println("|" + Joiner.on(' ').skipNulls().join(nameStack) + "|");
प्रिंट करता है: |i am a coder|
दिया हुआ:
String[] a = new String[] { "Hello", "World", "!" };
फिर कोबर्ड के उत्तर के विकल्प के रूप में, जहां गोंद "," है:
Arrays.asList(a).toString().replaceAll("^\\[|\\]$", "")
या एक अलग स्ट्रिंग के साथ समतल करने के लिए, जैसे "& amp;"।
Arrays.asList(a).toString().replaceAll(", ", " & ").replaceAll("^\\[|\\]$", "")
हालाँकि ... यह केवल तभी काम करता है जब आप जानते हैं कि सरणी या सूची में मौजूद मान में "" स्ट्रिंग स्ट्रिंग नहीं है ""।
Arrays.asList(a).toString()
मैं जो करना चाहता था, उसके लिए काम किया
यदि आप स्प्रिंग फ्रेमवर्क का उपयोग कर रहे हैं तो आपके पास स्ट्रिंगरिल्स क्लास है:
import static org.springframework.util.StringUtils.arrayToDelimitedString;
arrayToDelimitedString(new String[] {"A", "B", "C"}, "\n");
कोर में नहीं, नहीं। "जावा एरे ज्वाइन ज्वाइन स्ट्रिंग ग्लू" की खोज आपको कुछ कोड स्निपेट प्रदान करेगी कि इसे कैसे प्राप्त किया जाए।
जैसे
public static String join(Collection s, String delimiter) {
StringBuffer buffer = new StringBuffer();
Iterator iter = s.iterator();
while (iter.hasNext()) {
buffer.append(iter.next());
if (iter.hasNext()) {
buffer.append(delimiter);
}
}
return buffer.toString();
}
यदि आप एक त्वरित सरणी-से-स्ट्रिंग रूपांतरण की तलाश में यहां पहुंचे हैं, तो Arrays.toString () का प्रयास करें ।
Object[]
पारित का एक स्ट्रिंग प्रतिनिधित्व बनाता है । परिणाम ब्रैकेट्स ("[]"
) से घिरा हुआ है , प्रत्येक तत्व को स्ट्रिंग के माध्यम से परिवर्तित किया जाता हैString.valueOf(Object)
और इसके द्वारा अलग किया जाता है", "
। यदि सरणी हैnull
, तो"null"
वापस आ गया है।
बस "मैं सबसे छोटा हूं" चुनौती के लिए, यहां खदानें हैं;)
Iterative:
public static String join(String s, Object... a) {
StringBuilder o = new StringBuilder();
for (Iterator<Object> i = Arrays.asList(a).iterator(); i.hasNext();)
o.append(i.next()).append(i.hasNext() ? s : "");
return o.toString();
}
पुनरावर्ती:
public static String join(String s, Object... a) {
return a.length == 0 ? "" : a[0] + (a.length == 1 ? "" : s + join(s, Arrays.copyOfRange(a, 1, a.length)));
}
copyOfRange()
") के लिए अक्षम है ।
कुछ भी नहीं बनाया है कि मुझे पता है।
अपाचे कॉमन्स लैंग में एक वर्ग StringUtils
होता है जिसमें कई कार्य शामिल होते हैं।
यह मेरा इसे करने का तरीका है।
private String join(String[] input, String delimiter)
{
StringBuilder sb = new StringBuilder();
for(String value : input)
{
sb.append(value);
sb.append(delimiter);
}
int length = sb.length();
if(length > 0)
{
// Remove the extra delimiter
sb.setLength(length - delimiter.length());
}
return sb.toString();
}
एक समान विकल्प
/**
* @param delimiter
* @param inStr
* @return String
*/
public static String join(String delimiter, String... inStr)
{
StringBuilder sb = new StringBuilder();
if (inStr.length > 0)
{
sb.append(inStr[0]);
for (int i = 1; i < inStr.length; i++)
{
sb.append(delimiter);
sb.append(inStr[i]);
}
}
return sb.toString();
}
मेरी फिरकी।
public static String join(Object[] objects, String delimiter) {
if (objects.length == 0) {
return "";
}
int capacityGuess = (objects.length * objects[0].toString().length())
+ ((objects.length - 1) * delimiter.length());
StringBuilder ret = new StringBuilder(capacityGuess);
ret.append(objects[0]);
for (int i = 1; i < objects.length; i++) {
ret.append(delimiter);
ret.append(objects[i]);
}
return ret.toString();
}
public static String join(Object... objects) {
return join(objects, "");
}
क्या आप केवल स्ट्रिंग कक्षा के तरीकों का उपयोग करके मेरी 3-लाइनों को पसंद करते हैं?
static String join(String glue, String[] array) {
String line = "";
for (String s : array) line += s + glue;
return (array.length == 0) ? line : line.substring(0, line.length() - glue.length());
}
StringBuilder
यदि आपको दक्षता की आवश्यकता हो तो उपयोग करें : P
यदि आप कार्यात्मक जावा पुस्तकालय का उपयोग कर रहे हैं और किसी कारणवश जावा 8 से स्ट्रीम का उपयोग नहीं कर सकते हैं (जो एंड्रॉइड + रेट्रोलंबा प्लगइन का उपयोग करते समय मामला हो सकता है), तो यहां आपके लिए एक कार्यात्मक समाधान है:
String joinWithSeparator(List<String> items, String separator) {
return items
.bind(id -> list(separator, id))
.drop(1)
.foldLeft(
(result, item) -> result + item,
""
);
}
ध्यान दें कि यह सबसे कुशल दृष्टिकोण नहीं है, लेकिन यह छोटी सूचियों के लिए अच्छा काम करता है।
मैं इसे एक स्ट्रिंग स्ट्रिंग का उपयोग करके करता हूं:
public static String join(String[] source, String delimiter) {
if ((null == source) || (source.length < 1)) {
return "";
}
StringBuilder stringbuilder = new StringBuilder();
for (String s : source) {
stringbuilder.append(s + delimiter);
}
return stringbuilder.toString();
} // join((String[], String)
s + delimiter
(स्ट्रिंग संचालक प्लस ऑपरेटर के साथ) एक का उपयोग करने के पूरे उद्देश्य को हराता है StringBuilder
।
सरल शॉर्टहैंड तकनीक है जिसका मैं ज्यादातर समय उपयोग करता हूं।
String op = new String;
for (int i : is)
{
op += candidatesArr[i-1]+",";
}
op = op.substring(0, op.length()-1);
java.util.rrays में एक 'asList' विधि है। Java.util.List / ArrayList API के साथ मिलकर यह आपको वह सब देता है जिसकी आपको आवश्यकता है :;
private static String[] join(String[] array1, String[] array2) {
List<String> list = new ArrayList<String>(Arrays.asList(array1));
list.addAll(Arrays.asList(array2));
return list.toArray(new String[0]);
}