Java - รวมตัวแปรภายในสตริงหรือไม่


114

ตกลงดังนั้นเราทุกคนควรรู้ว่าคุณสามารถรวมตัวแปรลงในสตริงได้โดยทำ:

String string = "A string " + aVariable;

มีวิธีทำดังนี้

String string = "A string {aVariable}";

กล่าวอีกนัยหนึ่ง:โดยไม่ต้องปิดเครื่องหมายคำพูดและเพิ่มเครื่องหมายบวก มันขี้เหร่มาก


10
@ จันทราโปรดอย่าถามว่าทำไม แต่ควรอธิบายถ้าเป็นไปได้ เป็นเพียงวิธีที่ฉันต้องการทำ ขอบคุณ.
Grey Adams

3
ใช้ Groovy แล้วคุณจะสามารถทำ "A string $ {aVariable}" ทั้งหมดที่คุณต้องการ
Kaleb Brasee

2
มีเทคนิคมากมายสำหรับสิ่งที่คล้ายกันที่กล่าวถึงในคำถามนี้แต่String.format()มีอยู่แล้วภายในภาษา
ig0774

@KalebBrasee ฟังดูสมบูรณ์แบบ แต่ฉันมักจะลังเลเมื่อต้องปรับเปลี่ยนภาษา ไม่อยากตั้งตัวกลับ
Grey Adams

1
@GrayAdams Groovy ไม่ทำให้คุณกลับมามันทำให้คุณเป็นอิสระ! : D
Kaleb Brasee

คำตอบ:


124

คุณสามารถใช้ String.format (.... ) ได้ตลอดเวลา กล่าวคือ

String string = String.format("A String %s %2d", aStringVar, anIntVar);

ฉันไม่แน่ใจว่าสิ่งนั้นน่าสนใจเพียงพอสำหรับคุณหรือไม่ แต่ก็มีประโยชน์มากทีเดียว ไวยากรณ์จะเหมือนกับ printf และ java.util.Formatter ฉันใช้มันมากโดยเฉพาะอย่างยิ่งถ้าฉันต้องการแสดงข้อมูลตัวเลขแบบตาราง


2
ฉันรู้ว่านี่เป็นเรื่องของความคิดเห็น แต่ฉันไม่เห็นว่าformatมันน่าดึงดูดไปกว่านิพจน์การต่อสตริงธรรมดา ๆ อย่างไร สิ่งที่formatเป็นของตัวเองคือเมื่อคุณต้องทำการขยายการจัดรูปแบบตัวเลขและอื่น ๆ
Stephen C

1
@StephenC: ฉันไม่เห็นด้วยกับคุณเลย แต่เป็นทางเลือกที่มีประโยชน์สำหรับการจัดรูปแบบ String โดยเฉพาะอย่างยิ่งเมื่อจำเป็นต้องทำ padding ตามที่คุณพูดและที่ฉันพูดข้างต้น (กล่าวคือเพื่อแสดงข้อมูลตัวเลขแบบตาราง) ฉันใช้มันมาพอสมควรในการจัดรูปแบบเคมีในเลือดและรายงานผล CBC
Hovercraft Full Of Eels

@StephenC ฉันชอบรูปแบบด้วยเหตุผลบางประการประการแรก '% d' ใช้ตัวคั่นบรรทัดของแพลตฟอร์ม ประการที่สองคุณสามารถค้นหาตัวแปรทั้งหมดได้อย่างง่ายดายในตอนท้าย คุณสามารถฟอร์แมตใหม่หรือจัดลำดับตัวแปรที่คุณป้อนใหม่ได้อย่างง่ายดาย ง่ายกว่าที่จะหลีกเลี่ยงข้อผิดพลาด (เช่น1 + "oops") โดยเฉพาะอย่างยิ่งหากคุณใช้ FindBugs (ซึ่งจะแยกวิเคราะห์สตริงรูปแบบและพารามิเตอร์อินพุต) และอย่างที่ผู้ถามบอกว่าในหลาย ๆ กรณีมันอ่านง่ายกว่า แน่นอนว่ามันน่าเสียดายที่formatวิธีนี้ถูกทำให้คงที่ซึ่งเป็นความผิดพลาดในการออกแบบ
Maarten Bodewes

@owlstead - "แน่นอนว่ามันน่าเสียดายที่วิธีการจัดรูปแบบเป็นแบบคงที่นั่นเป็นความผิดพลาดในการออกแบบที่ค่อนข้างโง่" . ฮะ? วิธีจะformatเกี่ยวข้องกับสตริงเป้าหมาย? แน่นอนคุณไม่ได้แนะนำว่าเราควรจะเขียน"A String %s %2d".format(aStringVar, anIntVar)... คุณ?
Stephen C

1
@owlstead - "asFormat" คงไม่ถูกต้อง หมายความว่าเมธอดกำลังสร้างและส่งคืนอ็อบเจ็กต์รูปแบบ
Stephen C

70

สิ่งนี้เรียกว่าการแก้ไขสตริง ไม่มีใน Java

แนวทางหนึ่งคือการใช้ String.format:

String string = String.format("A string %s", aVariable);

อีกวิธีหนึ่งคือการใช้ห้องสมุด templating เช่นความเร็วหรือFreeMarker


38

นอกจากนี้ให้พิจารณาjava.text.MessageFormatซึ่งใช้ไวยากรณ์ที่เกี่ยวข้องซึ่งมีดัชนีอาร์กิวเมนต์ตัวเลข ตัวอย่างเช่น,

String aVariable = "of ponies";
String string = MessageFormat.format("A string {0}.", aVariable);

ผลลัพธ์stringมีสิ่งต่อไปนี้:

A string of ponies.

โดยทั่วไปคลาสจะใช้สำหรับการจัดรูปแบบตัวเลขและชั่วคราว ตัวอย่างของJFreeChartการจัดรูปแบบฉลากอธิบายไว้ที่นี่ ; คลาสจะจัดRCInfoรูปแบบบานหน้าต่างสถานะของเกม


1
สำหรับใครบางคนที่มาจาก CSharp วิธีนี้จะตรงไปตรงมากว่าเนื่องจากคล้ายกับสตริงรูปแบบใน C #
Mojtaba

0

คุณสามารถใช้รูปแบบ String เพื่อรวมตัวแปรภายในสตริง

ฉันใช้รหัสนี้เพื่อรวม 2 ตัวแปรในสตริง:

สตริง myString = String.format ("นี่คือสตริงของฉัน% s% 2d", variable1Name, variable2Name);

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.