CodeGym /مدونة جافا /Random-AR /طرق مختلفة لعكس سلسلة في جافا
John Squirrels
مستوى
San Francisco

طرق مختلفة لعكس سلسلة في جافا

نشرت في المجموعة
يمكن أيضًا قول السلاسل النصية في Java كمجموعة من الأحرف. تُستخدم السلاسل النصية في Java لتخزين النصوص/الأحرف. في لغة برمجة جافا، تعتبر السلاسل كائنات. في Java، السلاسل هي كائنات محددة مسبقًا وهي فئة تسمى String. جميع متغيرات السلسلة هي مثيلات لفئة السلسلة في Java. ومن هنا يمكننا أن نفهم أن السلاسل النصية في Java ليست من الأنواع البدائية مثل int أو char في لغات البرمجة الأخرى. في هذه المقالة، سنقرأ كيفية عكس سلسلة في Java. الشرط الأساسي لذلك هو أنه يجب أن تعرف كيفية إنشاء سلسلة في Java ، والمفهوم الأساسي لطرق السلسلة المضمنة، وكيفية تنفيذ العمليات بمساعدة الحلقات.

نطاق المقال

- في هذه المقالة، سنقرأ عن الطرق المختلفة لكيفية عكس سلسلة في Java. - سنرى أيضًا بعض الطرق المعدة مسبقًا والتي من خلالها يمكننا عكس سلسلة في Java. - سنقرأ أيضًا عن تعقيد الزمان والمكان لكل طريقة عكسية في Java. - هناك عدة طرق لعكس سلسلة في Java، ولكل منها مزاياها وعيوبها. في هذه المقالة، سوف نستكشف بعض الطرق الأكثر استخدامًا لعكس سلسلة في Java.

مقدمة

السلاسل هي كائنات غير قابلة للتغيير في جافا، والسلاسل هي مجرد سلسلة من الأحرف في جافا. يتم تعريف سلاسل الأسطر المفردة في جافا بعلامات اقتباس مفردة بينما يتم تعريف سلاسل الأسطر المتعددة في جافا بعلامات اقتباس ثلاثية، لدى جافا العديد من طرق السلسلة المتاحة، ولكن اليوم في هذه المقالة سنقرأ عن الطرق المختلفة لكيفية عكس سلسلة في جافا. تعد لغة البرمجة جافا من أكثر لغات البرمجة استخدامًا في العالم، وهي معروفة ببساطتها وسهولة استخدامها. إحدى العمليات الأكثر شيوعًا التي يقوم بها المبرمجون على السلاسل هي عكسها. في هذه المقالة، سنناقش طرقًا مختلفة لعكس سلسلة في Java. أولاً، دعونا نقرأ عن الطريقة الأكثر شيوعًا لاستخدام حلقة for في جافا:

عكس السلسلة في جافا باستخدام حلقة for:

تعد هذه التقنية واحدة من أبسط الطرق لعكس سلسلة في Java باستخدام حلقة for. يمكننا تكرار أحرف السلسلة من النهاية إلى البداية، وإضافتها إلى متغير سلسلة جديد. فيما يلي مثال لكيفية عكس سلسلة باستخدام حلقة for :
//in the above code we have reversed the string using a for loop in java
public class reverseofthestring {
  public static void main(String[] args) {

    String s1 = "java is fun";
      // we are creating the second string to store the reversed string and print it while iterating the for loop
    String s2 = "";

    for(int i = s1.length()-1; i>=0; i--)
    {
        // in the above line we have stored the reversed string by iterating the for loop from the last index and stored the value in the second string created s2.
      s2 = s2 + s1.charAt(i);
    }

    System.out.print("The reversed string of the '"+s1+"' is: " );
    System.out.println(s2);
  }
}
انتاج |
The reversed string of the s1 is:nuf si avaj
في الكود أعلاه، أخذنا أولاً مدخلات سلسلة تسمى s1 وأنشأنا سلسلة فارغة s2 ثم كررنا حلقة for من الفهرس الأخير ثم قمنا بتخزين قيمة كل حرف في تلك السلسلة. قم بتشغيل الكود أعلاه في محررك للحصول على شرح أفضل وأكثر وضوحًا. التعقيد الزمني للكود أعلاه هو O(N)، وكما كررنا على جميع العناصر n، فإن التعقيد المكاني للكود أعلاه هو O(N). الآن دعونا نقرأ عن العملية التالية وهي عكس السلسلة باستخدام منشئ السلسلة، والآن دعونا نقرأ عنها بالتفصيل:

عكس السلسلة باستخدام فئة منشئ السلسلة

يمكننا أيضًا عكس السلسلة في Java باستخدام فئة StringBuilder. توفر فئة StringBuilder طريقة عكسية () يمكن استخدامها لعكس سلسلة. يتم استخدام الطريقة العكسية () لفئة Java StringBuilder لاستبدال تسلسل الأحرف هذا بعكس التسلسل. لا تحتوي فئة StringBuilder في Java على طريقة toCharArray()، بينما تحتوي فئة String على طريقة toCharArray(). الآن دعونا نفهم بمساعدة مثال:
public class reverseusingbuilder {
    public static void main(String[] args) {
        StringBuilder s1 = new StringBuilder("abc");
        System.out.println("The original string1 is  = " + s1);
        StringBuilder s2 = new StringBuilder("cab");
        System.out.println("The original string2 is = " + s2);
         StringBuilder s3 = new StringBuilder("wer");
        System. out.println("The original string3 is = " + s3);
        // reversing of stringbuilder
        System.out.println("The reverse of the string is reverse1 = " + s1.reverse());
        System.out.println("The reverse of the string2 is reverse2 = " + s2.reverse());
         System.out.println("The reverse of the string3 is reverse2 = " + s3.reverse());
    }
}
انتاج |
The original string1 is  = abc
The original string2 is  =cab
The original string3 is  =wer
The reversed string1 is  = cba
The reversed string2 is  = bac
The reversed string3 is  =rew
في هذه الطريقة، يمكننا أن نرى أنه باستخدام فئة منشئ السلسلة المضمنة، قمنا بعكس السلسلة. هذه الطريقة فعالة للغاية، لأنها تتطلب تمريرة واحدة فقط عبر السلسلة. ومع ذلك، فإنه يتطلب إنشاء كائن StringBuilder جديد، والذي يمكن أن يضيف بعض الحمل. هذه الطريقة بسيطة نسبيًا وسهلة الفهم، ولكنها قد تكون أقل كفاءة من الطرق الأخرى، لأنها تتطلب تمريرات متعددة عبر السلسلة وإنشاء سلسلة جديدة لكل حرف. قم بتشغيل الكود أعلاه في محررك للحصول على شرح أفضل وأكثر وضوحًا. الآن دعونا نرى طريقة أخرى لعكس السلسلة باستخدام تقنية العودية:

عكس السلسلة باستخدام العودية

العودية هي تقنية تستدعي فيها الوظيفة نفسها. يمكننا استخدام العودية لعكس سلسلة ما عن طريق تقسيمها إلى سلاسل فرعية أصغر. العودية في Java هي عملية تستدعي فيها الطريقة نفسها بشكل مستمر. لعكس السلسلة في جافا باستخدام العودية أولا علينا إزالة الحرف الأول من السلسلة ثم إلحاق هذا الحرف في نهاية السلسلة ثم يتعين علينا تكرار الخطوة أعلاه حتى تصبح سلسلة الإدخال فارغة. الآن دعونا نفهم هذا بمساعدة مثال:
public class reverse string
{
//in this line we are writing the recursive function to reverse a string
public String reverse string(String s1)
{
//first we will check if the string is empty or not
if(s1.isEmpty())
{
System. out.println("String is empty.")
//if the above condition is true then it returns the same string as if the string is empty itself then we cannot reverse the string
return s1;
}
else
{
return reverseString(s1.substring(1))+s1.charAt(0);
}
}
public static void main(String[] args)
{
reversestring q1 = new reversestring();
String res1 = q1.reverseString("JAVA IS FUN");
String res2 = q1.reverseString("STRINGS OBJECTS JAVA");
String res3 = q1.reverseString("IMMUTABLE CLASS OBJECTS");
System.out.println(res1);
System.out.println(res2);
System.out.println(res3);
}
}
انتاج |
NUF SI AVAJ
AVAJ STCEJBO SGNIRTS
STCEJBO SSALC ELBATUMMI
ومن هنا يمكننا أن نرى أنه باستخدام العودية قمنا بعكس السلسلة التي قمنا أولاً بالتحقق منها ما إذا كانت السلسلة فارغة أم لا، وإذا كانت السلسلة فارغة فلن يكون هناك أحرف يمكن عكسها. يمكن أن تكون هذه الطريقة أكثر كفاءة من طريقة for-loop، لأنها تتطلب تمريرًا واحدًا فقط عبر السلسلة. ومع ذلك، يمكن أيضًا أن تكون أكثر تعقيدًا وأصعب في الفهم، لأنها تتضمن استخدام التكرار . قم بتشغيل الكود أعلاه في محررك للحصول على شرح أفضل وأكثر وضوحًا. دعونا نرى مثالاً آخر لكيفية عكس سلسلة باستخدام العودية في جافا:
public static String reverseusingrecursion(String s1) {
    if (s1.length() == 1) {
        return s1;
    }
    //We have applied recursion in this line
    return s1.charAt(s1.length() - 1) + reverseUsingRecursion(s1.substring(0, s1.length() - 1));
}
الآن دعونا نقرأ عن طريقة أخرى لعكس سلسلة في جافا تستخدم المصفوفة:

عكس سلسلة في جافا باستخدام صفيف

يمكننا أيضًا عكس سلسلة ما عن طريق تحويلها إلى مصفوفة أحرف، وتغيير المصفوفة، ثم تحويلها مرة أخرى إلى سلسلة. أولاً، يتعين علينا إنشاء مصفوفة أحرف فارغة بنفس حجم السلسلة المحددة، ثم يتعين علينا ملء مصفوفة الأحرف للخلف بأحرف من السلسلة المحددة، ثم يتعين علينا أخيرًا تحويل مصفوفة الأحرف إلى السلسلة باستخدام طريقة النسخ وإعادته. الآن دعونا نفهم هذا بمساعدة مثال:
public class Main
{
    // In this Method of conversion we have to reverse a string in Java using a character array
    public static String reverse(String s1)
    {
        // we have to check if the string is empty or not and return if the string is null or empty
        if (s1 == null || s1.equals("")) {
            return s1;
        }
 // if it is equal to empty then we will simply print the string and break it.
        // else we will find the string length
        int len = str.length();

        // and then we have to create a character array of the same size as that of the string to store the value after reversing
        char[] new_arr = new char[n];

        // and by iterating the loop backward we have to fill the character array backward with characters in the string
        for (int i = 0; i < len; i++) {
            new_arr[len - i - 1] = str.charAt(i);
        }

        // and in the final step after reversing we have to convert the character array to string and return it
        to return String.copy value of(new_arr);
    }

    public static void main(String[] args)
    {
        // taking a string input for reverse
        String s1 = "JAVA IS FUN";

        // In this line we are calling the reverse function and reversing the string
        str = reverse(str);

        System.out.println("The reversed string is " + s1);
    }
}
انتاج |
NUF SI AVA
في هذه الطريقة علينا عكس السلسلة إلى مصفوفة أحرف نعرفها، لذا أولاً سوف نتحقق مما إذا كانت السلسلة فارغة أم لا ونعود إذا كانت السلسلة فارغة أو فارغة إذا كانت تساوي فارغة ثم سنقوم ببساطة بطباعة السلسلة و في حالة الاستراحة، سنجد طول السلسلة ثم يتعين علينا إنشاء مصفوفة أحرف بنفس حجم السلسلة لتخزين القيمة بعد العكس ومن خلال تكرار الحلقة للخلف، يتعين علينا ملء مصفوفة الأحرف للخلف بالأحرف الموجودة في السلسلة وفي الخطوة الأخيرة بعد العكس علينا تحويل مصفوفة الأحرف إلى سلسلة وإعادتها. قم بتشغيل الكود أعلاه في محررك للحصول على شرح أفضل وأكثر وضوحًا. الآن دعونا نقرأ عن الخطوة التالية، حيث يمكننا أيضًا عكس السلسلة في Java باستخدام Stream API. والآن دعونا نقرأ عنها بالتفصيل بالاستعانة ببعض الأمثلة:

عكس سلسلة في Java باستخدام Stream API:

قدمت Java 8 واجهة Stream API التي يمكن استخدامها لتنفيذ عمليات النمط الوظيفي على المجموعات. يمكننا استخدام Stream API لعكس سلسلة ما عن طريق تحويلها إلى دفق من الأحرف، وعكس الدفق، ثم تحويله مرة أخرى إلى سلسلة. يمكننا عكس سلسلة في جافا باستخدام تدفقات ومجمعات مختلفة، يتعين علينا أولاً إدخال سلسلة ثم استخدام خريطة على السلسلة بأكملها في كائن StringBuilder وفي نفس الوقت عكسها باستخدام الطريقة العكسية () لفئة StringBuilder و ثم أخيرًا، قم بتجميع السلسلة المعكوسة باستخدام الدفق. طريقة التجميع () والمجمعات. طريقة الانضمام () سنقوم بطباعة كل من السلاسل الأصلية/المعكوسة مع طولها. الآن دعونا نفهم هذا بمساعدة مثال:
public static String reverseUsingStream(String str) {
    return str. chars()
              .mapToObj(c -> (char) c)
              .collect(StringBuilder::new, StringBuilder::append, StringBuilder::append)
              .reverse()
              .toString();
}
في هذا المثال، قمنا بعكس السلسلة في Java باستخدام تدفقات Java ومجمعاتها. قم بتشغيل الكود أعلاه في محررك للحصول على شرح أفضل وأكثر وضوحًا. الآن دعونا نرى كيف يمكننا عكس السلسلة باستخدام المكدس. والآن دعونا نقرأ عنها بالتفصيل بمساعدة مثال:

عكس السلسلة باستخدام المكدس

هناك طريقة أخرى لعكس سلسلة في Java وهي باستخدام المكدس. تتمثل الفكرة في دفع كل حرف من سلسلة الإدخال إلى المكدس ثم إخراج الأحرف من المكدس للحصول على السلسلة المعكوسة. الآن دعونا نقرأ المزيد عنها بالتفصيل بمساعدة مثال:
public static String reverse string(String input) {
    Stack<character> stack = new Stack<>();
    for (int i = 0; i < input.length(); i++) {
        stack.push(input.charAt(i));
    }
    StringBuilder sb = new StringBuilder();
    while (!stack.isEmpty()) {
        sb.append(stack.pop());
    }
    return sb.toString();
}

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

خاتمة

الطريقة الأولى هي استخدام فئة StringBuilder، التي تحتوي على طريقة عكسية مضمنة تقوم بإرجاع سلسلة جديدة تمثل عكس السلسلة الأصلية. الطريقة الثانية هي استخدام حلقة for، حيث نقوم بتحويل السلسلة الأصلية إلى مصفوفة أحرف والتكرار عبر المصفوفة بترتيب عكسي، وتعيين الأحرف المقابلة لمصفوفة أحرف جديدة، وأخيرًا إنشاء سلسلة جديدة باستخدام مصفوفة أحرف تلك. الطريقة الثالثة هي استخدام العودية، حيث نستدعي دالة العودية ونحل المشكلة عن طريق ربط الحرف الأول من السلسلة مع السلسلة الفرعية المعكوسة للأحرف المتبقية. الطريقة الرابعة هي استخدام مصفوفة لعكس سلسلة في Java. في الطريقة الخامسة، استخدمنا Stream API ومجمع Java لعكس السلسلة، وفي الطريقة الأخيرة استخدمنا المكدس لعكس السلسلة في Java. ولكل من هذه الطرق مميزاتها وعيوبها، ويعتمد اختيار الطريقة على المتطلبات المحددة للمشكلة وتفضيلات المبرمج. بشكل عام، توضح هذه الطرق مرونة وتعدد استخدامات Java في معالجة السلسلة.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION