1. الإحصائيات عدد رسائل السلسلة (والحفاظ على الترتيب الأبجدي)
على سبيل المثال: aabbbbbbbba oh bcab cdabc deaaa
هناك 5 طرق أعرفها. إذا كان لديك أي منها أفضل ، فالرجاء إعطائي بعض النصائح.
// method 1 public static void lettercount1 (سلسلة s) {s = s.replaceall (" +" ، "") ؛ // 1 ، تحويل إلى صفيف حرف char c [] = s.tochararray () ؛ الخريطة <الحرف ، integer> tree = new treemap <الحرف ، integer> () ؛ لـ (int i = 0 ؛ i <c.length ؛ i ++) {// أولاً: a ، 1 // الثانية: a ، 2 // 2 ، احصل على القيمة المقابلة لقيمة عدد صحيح المفتاح = tree.get (c // 3 ، قم بتخزين شجرة الحكم. } // إذا كان تنسيق النتيجة مطلوبًا: A (5) B (4) C (3) D (2) E (1) StringBuilder SBU = New StringBuilder () ؛ لـ (مفتاح الحرف: tree.keyset ()) {integer count = tree.get (key) ؛ sbu.append (key) .Append ("(" (". append (count) .Append (") ") ؛ } // تحويل SBU إلى String system.out.println (sbu.toString ()) ؛} // الطريقة 2 استخدم Dream // سيكون هذا غير صحيح عند اختبار الأحرف الخاصة ، مثل // n ، وسيكون طلبه غير صحيح. هذا ناتج عن MAP // حل استخدم Treemap public static void lettercount2 (سلسلة s) {s = s.replaceall (" +" ، "") ؛ treemap <string ، long> result = arrays.stream (S.Split ("")) .sorted () // .collect (collectors.groupingby (function.identity () ، countors.counting ())) ؛ .collect (collectors.groupingby (function.identity () ، treemap :: new ، collectors.counting ())) ؛ System.out.println (نتيجة) ؛ } // method 3 استخدم collections.frequency // في الواقع ، إنه تحويل السلسلة إلى مجموعة لحفظ كل سلسلة ، ومقارنة كل سلسلة مع مجموعة lettercount3 (سلسلة S) {s = s.replaceall ( +"،" ") ؛ قائمة <Tring> list = arrays.aslist (S.Split ("")) ؛ الخريطة <string ، integer> map = new treemap <string ، integer> () ؛ لـ (String Str: list) {map.put (str ، collections.frequency (list ، str)) ؛} system.out.println (map) ؛ } // method 4 public static void lettercount4 (String s) {s = s.replaceall (" +" ، "") ؛ سلسلة [] strs = s.split ("") ؛ الخريطة <string ، integer> map = new treemap <string ، integer> () ؛ لـ (string str: strs) {map.put (str ، stringCount (s ، str)) ؛} system.out.println (map) ؛ } // method 5 public static void lettercount5 (String s) {s = s.replaceall (" +" ، "") ؛ سلسلة [] strs = s.split ("") ؛ الخريطة <string ، integer> map = new treemap <string ، integer> () ؛ لـ (string str: strs) {map.put (str ، stringCount2 (s ، str)) ؛} system.out.println (map) ؛ } // استخدم split public static int stringCount (سلسلة maxstr ، السلسلة الفرعية) {// note // 1. على سبيل المثال ، إذا لم يتم العثور على QQQQ ، فسيتم إرجاع السلسلة مباشرة // 2. ملء تلقائيًا // 4. بالنسبة للأحرف الخاصة ، يرجى الانتباه إلى استخدام حرف الهروب int = (maxstr + "") .split (sentrstr) .Length - 1 ؛ StringCount2 (String MaxStr ، String Senttr) {int count = 0 ؛ matcher m = pattern.compile (sentrstr) .Matcher (maxstr) ؛2. الإحصائيات عدد الكلمات في سلسلة (اللغة الإنجليزية فقط)
هذا هو نفسه في الواقع كما هو مذكور أعلاه ، وفقط طريقة بسيطة مكتوبة أدناه
public static void wordstringCount (سلسلة S) {// البداية هي سلسلة ، وبعد تقسيمها يصبح دفق سلسلة. خريطة <string ، long> result = arrays.stream (S.Split ("// s+")) .map (word-> word.replaceall ("[^^a-za-z]" ، "") System.out.println (نتيجة) ؛ }3. الإحصائيات عدد الكلمات النصية (الإنجليزية فقط)
// ابحث عن عدد الكلمات الموجودة في نص نص باطلب باطل ثابت (مسار السلسلة) يلقي ioException {// أن دفق السلسلة هو الأول في البداية // الانقسام أولاً // Dream.flatmap (str-> starrays.stream (str.split (" +"))) .map (word-> word.replaceall ("[^a-za-z]" ، "")) System.out.println (نتيجة) ؛ }4. آخر غير ذي صلة
نحن نعلم أنه يمكن تمرير قوائم المعلمات المتغيرة دون تمرير المعلمات.
ل
public void testName () {system.out.println ("a") ؛ } public void testName (String ... s) {// لا يتم تمرير أي معلمات ، ستقوم S بتهيئة كائن بشكل افتراضي system.out.println ("B") ؛ }ما الذي يجب أن أطبعه عند استدعاء TestName ()؟ سيطبع A وسوف يتطابق تلقائيًا مع الطريقة التي تكون فيها المعلمة فارغة حقًا
الملخص أعلاه للعديد من الطرق لـ Java8 لحساب عدد رسائل السلسلة (الموصى بها) هو المحتوى بالكامل المشترك من قبل المحرر. آمل أن يعطيك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.