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