นี่คือสิ่งที่ฉันมี:
private static int countNumChars(String s) {
for(char c : s.toCharArray()){
if (Equals(c," "))
}
}
แต่รหัสนั้นบอกว่าไม่พบ Symbol สำหรับวิธีการนั้น ฉันจำได้ว่า Java มีตัวเปรียบเทียบแบบนี้ ... มีข้อเสนอแนะไหม
นี่คือสิ่งที่ฉันมี:
private static int countNumChars(String s) {
for(char c : s.toCharArray()){
if (Equals(c," "))
}
}
แต่รหัสนั้นบอกว่าไม่พบ Symbol สำหรับวิธีการนั้น ฉันจำได้ว่า Java มีตัวเปรียบเทียบแบบนี้ ... มีข้อเสนอแนะไหม
คำตอบ:
if (c == ' ')
char
เป็นประเภทข้อมูลดั้งเดิมดังนั้นจึงสามารถเปรียบเทียบกับ==
.
นอกจากนี้โดยใช้เครื่องหมายคำพูดคู่คุณสร้างString
ค่าคงที่ ( " "
) ในขณะที่อัญประกาศเดี่ยวเป็นchar
ค่าคงที่ ( ' '
)
รหัสที่คุณต้องการขึ้นอยู่กับความหมายของ "พื้นที่ว่าง"
หากคุณหมายถึงอักขระช่องว่าง ASCII / Latin-1 / Unicode (0x20) หรือที่เรียกว่า SP ดังนั้น:
if (ch == ' ') {
// ...
}
หากคุณหมายถึงอักขระช่องว่าง ASCII แบบดั้งเดิม (SP, HT, VT, CR, NL) แล้ว:
if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
// ...
}
หากคุณหมายถึงอักขระช่องว่าง Unicode ใด ๆ ให้ทำดังนี้
if (Character.isWhitespace(ch)) {
// ...
}
โปรดทราบว่าช่องว่าง Unicode มีรหัสควบคุม ASCII เพิ่มเติมและอักขระ Unicode อื่น ๆ ในระนาบรหัสที่สูงกว่า ดู Javadoc Character.isWhitespace(char)
สำหรับ
สิ่งที่คุณเขียนคือ:
if (Equals(ch, " ")) {
// ...
}
สิ่งนี้ผิดในหลายระดับ ประการแรกวิธีที่คอมไพลเลอร์ Java พยายามตีความว่าเป็นการเรียกใช้เมธอดที่มีลายเซ็นของboolean Equals(char, String)
.
Equals
ปกติจะไม่ใช่ชื่อของวิธีการอยู่แล้ว อนุสัญญา Java คือชื่อเมธอดเริ่มต้นด้วยอักษรตัวพิมพ์เล็กchar
และString
ไม่ได้เปรียบและไม่สามารถโยนไปประเภทฐานร่วมกันมีสิ่งนี้เป็นตัวเปรียบเทียบใน Java แต่มันเป็นอินเทอร์เฟซไม่ใช่เมธอดและมีการประกาศดังนี้:
public interface Comparator<T> {
public int compare(T v1, T v2);
}
กล่าวอีกนัยหนึ่งชื่อเมธอดคือcompare
(not Equals
) จะส่งคืนจำนวนเต็ม (ไม่ใช่บูลีน) และเปรียบเทียบค่าสองค่าที่สามารถเลื่อนระดับเป็นประเภทที่กำหนดโดยพารามิเตอร์ type
มีคน (ในคำตอบที่ถูกลบ!) กล่าวว่าพวกเขาลองทำสิ่งนี้:
if (c == " ")
ซึ่งล้มเหลวด้วยเหตุผลสองประการ:
" "
เป็นสตริงลิเทอรัลไม่ใช่อักขระลิเทอรัลและ Java ไม่อนุญาตให้เปรียบเทียบโดยตรงของString
และchar
ค่า
==
คุณไม่ควรเปรียบเทียบสตริงหรือสตริงตัวอักษรโดยใช้ ตัว==
ดำเนินการในชนิดการอ้างอิงเปรียบเทียบเอกลักษณ์ของวัตถุไม่ใช่ค่าวัตถุ ในกรณีString
นี้เป็นเรื่องปกติที่จะมีวัตถุที่แตกต่างกันซึ่งมีเอกลักษณ์แตกต่างกันและมีมูลค่าเท่ากัน การ==
ทดสอบมักจะให้คำตอบที่ผิด ... จากมุมมองของสิ่งที่คุณพยายามทำที่นี่
คุณสามารถใช้
Character.isWhitespace(c)
หรือวิธีการอื่น ๆ ที่มีอยู่ในคลาส Character
if (c == ' ')
ยังใช้งานได้
เนื่องจากchar
เป็นประเภทดั้งเดิมคุณสามารถเขียนc == ' '
ได้
คุณจะต้องเรียกequals()
ประเภทเช่นการอ้างอิงหรือString
Character
ข้อเสนอแนะของฉันคือ:
if (c == ' ')
ในการเปรียบเทียบอักขระคุณใช้ตัว==
ดำเนินการ:
if (c == ' ')
Character.isSpaceChar(c) || Character.isWhitespace(c)
ทำงานให้ฉัน
"String".equals("some_text")
ในกรณีนี้คุณกำลังคิดของสตริงฟังก์ชั่นการเปรียบเทียบ Chars ไม่จำเป็นต้องใช้ฟังก์ชันนี้ แต่ตัว==
ดำเนินการเปรียบเทียบมาตรฐานจะเพียงพอ
private static int countNumChars(String s) {
for(char c : s.toCharArray()){
if (c == ' ') // your resulting outcome
}
}
ในตอนแรกโค้ดของคุณจะไม่คอมไพล์ เนื่องจากคำสั่ง if ที่ซ้อนกันไม่มีเครื่องหมายวงเล็บใด ๆ มันจะพิจารณาบรรทัดถัดไปของรหัสที่ควรดำเนินการ นอกจากนี้คุณกำลังเปรียบเทียบอักขระกับสตริง "" ลองเปรียบเทียบค่าเป็นตัวอักษรแทน ฉันคิดว่าไวยากรณ์ที่ถูกต้องจะเป็น:
if(c == ' '){
//do something here
}
แต่แล้วอีกครั้งฉันไม่คุ้นเคยกับ"Equal"
ชั้นเรียน
คุณสามารถลอง:
if(Character.isSpaceChar(ch))
{
// Do something...
}
หรือ:
if((int) ch) == 32)
{
// Do something...
}
ในการเปรียบเทียบStrings
คุณต้องใช้คำหลักเท่ากับ
if(c.equals(""))
{
}
equals
คีย์เวิร์ดใน Java มันเป็นตัวระบุ 3) เนื่องจากc
เป็นchar
(แบบดั้งเดิม !!) คุณไม่สามารถโทรc.equals(...)
ได้ 4) แม้ว่าคุณจะทำได้ แต่ก็ไม่มีchar
ค่าใดที่จะจับคู่""
ได้ ส่วนหลังหมายถึงสตริงที่ "ไม่มีอักขระอยู่ในนั้น" ที่ไม่สามารถจับคู่อักขระ
' '
ไม่มีเนื้อหา?