CodeGym /وبلاگ جاوا /Random-FA /روش های مختلف برای معکوس کردن یک رشته در جاوا
John Squirrels
مرحله
San Francisco

روش های مختلف برای معکوس کردن یک رشته در جاوا

در گروه منتشر شد
رشته ها در جاوا را می توان به عنوان آرایه ای از کاراکترها نیز گفت. رشته ها در جاوا برای ذخیره متن / کاراکتر استفاده می شود. در زبان برنامه نویسی جاوا، رشته ها به عنوان آبجکت در نظر گرفته می شوند. در جاوا رشته ها اشیاء یک کلاس از پیش تعریف شده به نام String هستند. همه متغیرهای رشته نمونه هایی از کلاس String در جاوا هستند. از این رو می توانیم بفهمیم که رشته های جاوا از انواع ابتدایی مانند int یا char در سایر زبان های برنامه نویسی نیستند. در این مقاله نحوه معکوس کردن یک رشته در جاوا را می خوانیم. پیش نیاز این کار این است که باید بدانید که چگونه یک رشته در جاوا ایجاد کنید و مفهوم اولیه روش های رشته داخلی و نحوه انجام عملیات با کمک حلقه ها را بدانید.

محدوده مقاله

- در این مقاله روش های مختلف معکوس کردن رشته در جاوا را خواهیم خواند. - همچنین چند روش از پیش ساخته شده را خواهیم دید که از طریق آنها می توانیم یک رشته را در جاوا معکوس کنیم. - همچنین در مورد پیچیدگی زمانی و مکانی هر روش معکوس در جاوا خواهیم خواند. - راه های مختلفی برای معکوس کردن یک رشته در جاوا وجود دارد که هر کدام مزایا و معایب خود را دارند. در این مقاله، برخی از متداول‌ترین روش‌های مورد استفاده برای معکوس کردن یک رشته در جاوا را بررسی می‌کنیم.

معرفی

رشته ها اشیای تغییرناپذیر در جاوا هستند، رشته ها فقط دنباله ای از کاراکترها در جاوا هستند. رشته های تک خطی در جاوا با نقل قول های تکی تعریف می شوند در حالی که رشته های چند خطی در جاوا با گیومه های سه گانه تعریف می شوند، جاوا چندین روش رشته ای در دسترس دارد، اما امروز در این مقاله در مورد روش های مختلف معکوس کردن یک رشته در جاوا خواهیم خواند. زبان برنامه نویسی جاوا یکی از پرکاربردترین زبان های برنامه نویسی در جهان است که به سادگی و سهولت استفاده از آن مشهور است. یکی از رایج ترین عملیاتی که برنامه نویسان روی رشته ها انجام می دهند، معکوس کردن آنها است. در این مقاله به روش های مختلف معکوس کردن رشته در جاوا می پردازیم. ابتدا اجازه دهید در مورد رایج ترین روش استفاده از حلقه for در جاوا مطالعه کنیم:

با استفاده از حلقه for، رشته را در جاوا معکوس کنید:

این تکنیک یکی از ساده ترین راه ها برای معکوس کردن یک رشته در جاوا با استفاده از حلقه 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) است. اکنون اجازه دهید در مورد فرآیند بعدی که معکوس کردن رشته با استفاده از سازنده رشته است، مطالعه کنیم، بنابراین اجازه دهید در مورد آن به طور مفصل مطالعه کنیم:

معکوس کردن رشته با استفاده از کلاس string builder

همچنین می توانیم رشته را در جاوا با استفاده از کلاس StringBuilder معکوس کنیم. کلاس StringBuilder یک متد ()reverse را ارائه می دهد که می تواند برای معکوس کردن یک رشته استفاده شود. متد reverse() کلاس جاوا StringBuilder برای جایگزینی این دنباله کاراکتر با معکوس دنباله استفاده می شود. کلاس StringBuilder در جاوا دارای متد 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 جدید دارد که می تواند مقداری سربار اضافه کند. این روش نسبتاً ساده و قابل درک است، اما می‌تواند نسبت به روش‌های دیگر کارایی کمتری داشته باشد، زیرا به چندین عبور از رشته و ایجاد یک رشته جدید برای هر کاراکتر نیاز دارد. برای توضیح بهتر و واضح کد بالا را در ویرایشگر خود اجرا کنید. حال اجازه دهید راه دیگری برای معکوس کردن رشته با استفاده از تکنیک بازگشتی ببینیم:

رشته را با استفاده از Recursion معکوس کنید

بازگشت تکنیکی است که در آن یک تابع خود را فراخوانی می کند. ما می توانیم از بازگشت برای معکوس کردن یک رشته با شکستن آن به زیر رشته های کوچکتر استفاده کنیم. بازگشت در جاوا فرآیندی است که در آن یک متد به طور مداوم خود را فراخوانی می کند. برای معکوس کردن رشته در جاوا با استفاده از Recursion ابتدا باید اولین کاراکتر را از رشته حذف کنیم و سپس آن کاراکتر را در انتهای رشته اضافه کنیم و سپس باید مرحله بالا را تکرار کنیم تا رشته ورودی خالی شود. حال اجازه دهید این را با کمک یک مثال درک کنیم:
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 باشد، زیرا فقط به یک عبور از رشته نیاز دارد. با این حال، همچنین می تواند پیچیده تر و درک آن دشوارتر باشد، زیرا شامل استفاده از بازگشت است . برای توضیح بهتر و واضح کد بالا را در ویرایشگر خود اجرا کنید. اجازه دهید نمونه دیگری از نحوه معکوس کردن یک رشته با استفاده از بازگشت در جاوا را ببینیم:
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
در این روش باید رشته را به یک آرایه کاراکتری که می‌دانیم برگردانیم، بنابراین ابتدا بررسی می‌کنیم که آیا رشته خالی است یا نه و اگر رشته خالی است یا خالی است، اگر مساوی با خالی باشد، به سادگی رشته را چاپ می‌کنیم و break other طول رشته را پیدا می کنیم و سپس باید یک آرایه کاراکتری به اندازه رشته ایجاد کنیم تا پس از معکوس کردن مقدار را ذخیره کنیم و با تکرار حلقه به عقب باید آرایه کاراکتر را به سمت عقب با کاراکترهای موجود در رشته پر کنیم. و در مرحله آخر پس از معکوس کردن باید آرایه کاراکتری را به رشته تبدیل کرده و برگردانیم. برای توضیح بهتر و واضح کد بالا را در ویرایشگر خود اجرا کنید. اکنون اجازه دهید در مورد مرحله بعدی مطالعه کنیم و همچنین می توانیم رشته را در جاوا با استفاده از Stream API معکوس کنیم. بنابراین اکنون اجازه دهید با کمک چند مثال در مورد آنها به طور مفصل مطالعه کنیم:

معکوس کردن یک رشته در جاوا با استفاده از Stream API:

جاوا 8 API Stream را معرفی کرد که می تواند برای انجام عملیات به سبک عملکردی در مجموعه ها استفاده شود. ما می‌توانیم از Stream API برای معکوس کردن یک رشته با تبدیل آن به جریانی از کاراکترها، معکوس کردن جریان، و سپس تبدیل آن به یک رشته استفاده کنیم. ما می‌توانیم یک رشته را در جاوا با استفاده از جریان‌ها و کلکتورهای مختلف معکوس کنیم، ابتدا باید یک رشته را وارد کنیم و سپس از یک Map در کل رشته در یک شی StringBuilder استفاده کنیم و در همان زمان آن را با استفاده از متد reverse() کلاس StringBuilder معکوس کنیم. سپس در نهایت، رشته معکوس را با استفاده از Stream جمع آوری کنید. متد collect() و Collectors. متد joining() هر دو رشته اصلی/معکوس را به همراه طول آنها چاپ می کنیم. حال اجازه دهید این را با کمک یک مثال درک کنیم:
public static String reverseUsingStream(String str) {
    return str. chars()
              .mapToObj(c -> (char) c)
              .collect(StringBuilder::new, StringBuilder::append, StringBuilder::append)
              .reverse()
              .toString();
}
در این مثال، رشته را در جاوا با استفاده از استریم ها و کلکتورهای جاوا برعکس کرده ایم. برای توضیح بهتر و واضح کد بالا را در ویرایشگر خود اجرا کنید. حالا بیایید ببینیم چگونه می توانیم رشته را با استفاده از پشته معکوس کنیم. حال اجازه دهید با کمک یک مثال در مورد آن به طور مفصل مطالعه کنیم:

رشته را با استفاده از پشته معکوس کنید

راه دیگری برای معکوس کردن یک رشته در جاوا وجود دارد که با استفاده از یک پشته است. ایده این است که هر کاراکتر از رشته ورودی را به پشته فشار دهید و سپس کاراکترهایی را از پشته بیرون بیاورید تا رشته معکوس به دست آید. حال اجازه دهید با استفاده از یک مثال بیشتر در مورد آن مطالعه کنیم:
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 است که دارای یک متد ()reverse داخلی است که رشته جدیدی را که برعکس رشته اصلی است برمی گرداند. روش دوم استفاده از یک حلقه for است که در آن رشته اصلی را به یک آرایه char تبدیل می کنیم و از طریق آرایه به ترتیب معکوس تکرار می کنیم، کاراکترهای مربوطه را به یک آرایه char جدید اختصاص می دهیم و در نهایت یک رشته جدید با استفاده از آن آرایه char ایجاد می کنیم. روش سوم استفاده از بازگشت است، که در آن یک تابع بازگشتی را فراخوانی می کنیم و با الحاق کاراکتر اول رشته به زیر رشته معکوس کاراکترهای باقی مانده، مشکل را حل می کنیم. روش چهارم استفاده از آرایه برای معکوس کردن یک رشته در جاوا است. در روش پنجم از استریم API و جمع کننده جاوا برای معکوس کردن رشته و در روش آخر از پشته برای معکوس کردن رشته در جاوا استفاده کردیم. هر کدام از این روش ها مزایا و معایب خود را دارند و انتخاب روش بستگی به الزامات خاص مسئله و ترجیح برنامه نویس دارد. به طور کلی، این روش ها انعطاف پذیری و تطبیق پذیری جاوا را در دستکاری رشته ها نشان می دهند.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION