วิธีการย้อนกลับสตริงใน Java

1. ภาพรวม

ในบทช่วยสอนฉบับย่อนี้เราจะมาดูกันว่าเราสามารถย้อนกลับStringใน Java ได้อย่างไร

เราจะเริ่มทำการประมวลผลโดยใช้โซลูชัน Java ธรรมดา ต่อไปเราจะมาดูตัวเลือกต่างๆที่ไลบรารีของบุคคลที่สามเช่น Apache Commons มีให้

นอกจากนี้เราจะแสดงให้เห็นถึงวิธีการที่จะกลับคำสั่งของคำในประโยค

2. แบบดั้งเดิมสำหรับ Loop

เรารู้ว่าสตริงไม่เปลี่ยนรูปใน Java วัตถุที่ไม่เปลี่ยนรูปคือวัตถุที่มีสถานะภายในคงที่หลังจากสร้างขึ้นทั้งหมดแล้ว

ดังนั้นเราจึงไม่สามารถย้อนกลับString ได้โดยการแก้ไข เราจำเป็นต้องสร้างสตริงใหม่ด้วยเหตุนี้

ก่อนอื่นเรามาดูตัวอย่างพื้นฐานโดยใช้for loop เราจะวนซ้ำการป้อนข้อมูลStringจากองค์ประกอบสุดท้ายไปยังองค์ประกอบแรกและต่ออักขระทุกตัวให้เป็นสตริงใหม่:

public String reverse(String input) { if (input == null) { return input; } String output = ""; for (int i = input.length() - 1; i >= 0; i--) { output = output + input.charAt(i); } return output; }

อย่างที่เราเห็นเราต้องระมัดระวังในกรณีที่มุมและปฏิบัติแยกกัน

เพื่อให้เข้าใจตัวอย่างดีขึ้นเราสามารถสร้างการทดสอบหน่วย:

@Test public void whenReverseIsCalled_ThenCorrectStringIsReturned() { String reversed = ReverseStringExamples.reverse("cat"); String reversedNull = ReverseStringExamples.reverse(null); String reversedEmpty = ReverseStringExamples.reverse(StringUtils.EMPTY); assertEquals("tac", reversed); assertEquals(null, reversedNull); assertEquals(StringUtils.EMPTY, reversedEmpty); }

3. StringBuilder

Java มีกลไกบางอย่างเช่นStringBuilderและStringBufferที่สร้างลำดับไม่แน่นอนของตัวละคร วัตถุเหล่านี้มีวิธีย้อนกลับ ()ที่ช่วยให้เราบรรลุผลตามที่ต้องการ

ที่นี่เราจำเป็นต้องสร้างStringBuilderจากอินพุตสตริงจากนั้นเรียกเมธอดreverse () :

public String reverseUsingStringBuilder(String input) { if (input == null) { return null; } StringBuilder output = new StringBuilder(input).reverse(); return output.toString(); }

4. Apache คอมมอนส์

Apache Commons เป็นไลบรารี Java ยอดนิยมที่มีคลาสยูทิลิตี้มากมายรวมถึงการจัดการสตริง

ตามปกติในการเริ่มต้นใช้งาน Apache Commons ก่อนอื่นเราต้องเพิ่มการพึ่งพา Maven:

 org.apache.commons commons-lang3 3.9 

StringUtilsระดับคือสิ่งที่เราต้องที่นี่เพราะมันให้ย้อนกลับ ()วิธีการคล้ายกับStringBuilder

ข้อดีอย่างหนึ่งของการใช้ห้องสมุดนี้คือวิธีการดำเนินการของยูทิลิตี้nullการดำเนินงาน -Safe ดังนั้นเราจึงไม่จำเป็นต้องแยกกรณีขอบแยกกัน

มาสร้างวิธีที่ตอบสนองวัตถุประสงค์ของเราและใช้คลาสStringUtils :

public String reverseUsingApacheCommons(String input) { return StringUtils.reverse(input); }

ตอนนี้กำลังมองหาที่ทั้งสามวิธีที่เราสามารถพูดได้ว่าแน่นอนหนึ่งในสามเป็นที่ง่ายที่สุดและผิดพลาดน้อยที่สุดวิธีที่จะย้อนกลับสตริง

5. การกลับลำดับของคำในประโยค

ตอนนี้สมมติว่าเรามีประโยคที่มีคำคั่นด้วยช่องว่างและไม่มีเครื่องหมายวรรคตอน เราจำเป็นต้องกลับลำดับของคำในประโยคนี้

เราสามารถแก้ปัญหานี้ได้ในสองขั้นตอน: การแยกประโยคด้วยตัวคั่นช่องว่างจากนั้นเชื่อมคำในลำดับย้อนกลับ

ก่อนอื่นเราจะแสดงวิธีการแบบคลาสสิก เราจะใช้เมธอด S tring.split ()เพื่อตอบสนองส่วนแรกของปัญหา ต่อไปเราจะย้ำย้อนกลับผ่านอาร์เรย์ที่เกิดขึ้นและเชื่อมคำที่ใช้StringBuilder แน่นอนเราต้องเพิ่มช่องว่างระหว่างคำเหล่านี้ด้วย:

public String reverseTheOrderOfWords(String sentence) { if (sentence == null) { return null; } StringBuilder output = new StringBuilder(); String[] words = sentence.split(" "); for (int i = words.length - 1; i >= 0; i--) { output.append(words[i]); output.append(" "); } return output.toString().trim(); }

อย่างที่สองเราจะพิจารณาใช้ไลบรารี Apache Commons อีกครั้งช่วยให้เราได้รหัสที่อ่านง่ายขึ้นและมีโอกาสเกิดข้อผิดพลาดน้อยลง เราจำเป็นต้องเรียกใช้เมธอดStringUtils.reverseDelimited ()ด้วยประโยคอินพุตและตัวคั่นเป็นอาร์กิวเมนต์:

public String reverseTheOrderOfWordsUsingApacheCommons(String sentence) { return StringUtils.reverseDelimited(sentence, ' '); }

6. บทสรุป

ในบทช่วยสอนนี้ก่อนอื่นเราได้ดูวิธีการย้อนกลับStringใน Java แบบต่างๆ เราได้ดูตัวอย่างการใช้ Java หลักรวมถึงการใช้ไลบรารีของบุคคลที่สามยอดนิยมเช่น Apache Commons

ต่อไปเราจะได้เห็นวิธีการกลับลำดับของคำในประโยคในสองขั้นตอน ขั้นตอนเหล่านี้ยังมีประโยชน์ในการบรรลุการเรียงสับเปลี่ยนอื่น ๆ ของประโยค

ตามปกติตัวอย่างโค้ดทั้งหมดที่แสดงในบทช่วยสอนนี้มีอยู่ใน GitHub