جافا - هناك بنيت في وظيفة لوصل السلاسل في سلسلة []؟

StackOverflow https://stackoverflow.com/questions/1810954

  •  06-07-2019
  •  | 
  •  

سؤال

وأو وسيلة أفضل من هذا؟

String concat(String[] strings) {
  StringBuilder out = new StringBuilder();

  for(String next: strings) {
    out.append(next);
  }

  return out.toString();
}

لا تقلق إذا لم يكن، أنا فقط أشعر بأن يجب أن يكون هناك بنيت في؟

هل كانت مفيدة؟

المحلول

لا، ليس في مكتبة جافا الحالية.

في JDK7 يجب أن تكون قادرا على كتابة String.join("", strings). وقد تبين أن "85٪" من الاستخدامات لأنه يريد فهرس في فاخرا للحلقة كانت للقيام سلسلة الانضمام (والتي يمكنك القيام به دون أي حال).

وأنا أعتقد إذا كنت تريد أن تكون كفاءة اوبر، يمكن أن تكتب فيه شيئا مثل:

public static String concat(String... strs) {
    int size = 0;
    for (String str : strs) {
        size += str.length;
    }

    final char[] cs = new char[size];
    int off = 0;
    try {
        for (String str : strs) {
            int len = str.length();
            str.getChars(0, len, cs, off);
            off += len;
        }
    } catch (ArrayIndexOutOfBoundsException exc) {
        throw new ConcurrentModificationException(exc);
    }
    if (off != cs.length) {
        throw new ConcurrentModificationException();
    }
    return new String(cs);
}

و(غير مترجمة أو اختبارها، بالطبع).

نصائح أخرى

ونلقي نظرة على المكتبات جوجل الجوافة ، والتي تتضمن <ل أ href = "http://code.google.com/p/google-collections/" يختلط = "noreferrer"> مجموعات جوجل بمجرد أن يمر من 1.0RC4 إلى 1.0. الجوافة ومجموعات تعطيك قدرا كبيرا من القوة والأناقة، وتستخدم بالفعل على نطاق واسع في رمز الإنتاج جوجل.

النجار الطبقة يناسب المثال الخاص بك تماما:

String[] strings = { "Stack", "Overflow", ".com" };
String site = Joiner.on("").join(strings);

والكسندر Stensby لديه أربعة أجزاء استكشاف من الجوافة / المجموعات.

ومثل مجموعات أباتشي، انها ليست جزءا من جدك، على الرغم من أنه يبني بعناية فائقة على رأس java.util.collection.

org.apache.commons.lang.StringUtils.join

والتوصية الثانية للنظر في جوجل الجوافة.

وصدر مجموعات جوجل الاسبوع الماضي، وهذا الأسبوع، وقد أفرجت الجوافة للاختبار. الاشياء مجموعات جوجل صلبة وسوف API لن تتغير. أنا أفضل بكثير مجموعات جوجل على اباتشي واحد، وتحديدا لأن لها عام كامل. يدعي الناس جوجل أيضا أن لها بسرعة كافية بالنسبة لهم لاستخدامها في الإنتاج، والتي هي مؤثرة إلى حد ما، ثابتة لا أستطيع التحقق من أنه شخصيا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top