อาร์เรย์ Java String: มีวิธีการขนาดหรือไม่


152

ฉันมาจากพื้นหลัง php และใน php มีarray_size()ฟังก์ชั่นที่จะบอกคุณว่ามีองค์ประกอบจำนวนเท่าใดในอาร์เรย์ที่ใช้

มีวิธีการที่คล้ายกันสำหรับString[]อาร์เรย์หรือไม่? ขอบคุณ


3
เฮ้คำตอบทั้งหมดอยู่ในนาทีเดียวกัน
jjnguy

1
อ๊ะ PHP กับเนมสเปซทั่วโลกที่รก วันเก่า ๆ ที่ดี ...
kevinji

2
ฉันคิดว่าเขาหมายถึง php's count () ไม่ใช่ array_size ()
Joshua Burns

คำตอบ:


277

ใช่.length(เหมือนอสังหาริมทรัพย์ไม่ใช่วิธี):

String[] array = new String[10];
int size = array.length;

2
สวัสดีเราจะหาเอกสารที่แสดงคุณสมบัติและฟังก์ชันทั้งหมดของวัตถุอาร์เรย์ได้อย่างไร ฉันไม่ได้หมายถึงวัตถุอาร์เรย์ซึ่งเป็นเอกสารเดียวที่ฉันสามารถหาได้
GMsoF

1
@GMsoF เอกสารสำหรับ "[]" (อาร์เรย์ไม่ใช่วัตถุอาร์เรย์) เป็นข้อกำหนดของ Java .eg docs.oracle.com/javase/specs/jls/se7/html/jls-10.htmlแก้ไข: อ่า ... ความคิดเห็นจาก 2,013 ...
Acapulco

44
array.length

เป็นสมาชิกสุดท้ายของอาร์เรย์ไม่ใช่วิธีการ


2
IIRC ไม่ใช่สนามจริงๆมันแค่ดูเหมือน
Tom Hawtin - tackline

โอ้แล้วมันคืออะไร? บางอย่างของอาเรย์พิเศษ?
jjnguy

3
"pseudo field" ซึ่งถูกคอมไพล์ให้กับรหัสความยาวอาร์เรย์พิเศษของ op-code แทนที่จะเป็น op-code access field
Pete Kirkham

2
มันเป็นเขตข้อมูลที่สอดคล้องกับ§10.7 ( java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7 ): "ความยาวฟิลด์สุดท้ายสาธารณะซึ่งมีจำนวนองค์ประกอบของอาร์เรย์ ( ความยาวอาจเป็นบวกหรือศูนย์) "
Michael Myers

19

นอกจากนี้อาจเป็นประโยชน์ที่จะทราบว่าหากคุณมีอาร์เรย์หลายมิติคุณสามารถรับมิติที่เกี่ยวข้องเพียงแค่ผนวก '[0]' ในอาร์เรย์ที่คุณกำลังสอบถามจนกว่าจะถึงแกน / tuple / มิติที่เหมาะสม

นี่อาจอธิบายได้ดีกว่าด้วยรหัสต่อไปนี้:

public class Test {
    public static void main(String[] args){
        String[][] moo = new String[5][12];

        System.out.println(moo.length); //Prints the size of the First Dimension in the array
        System.out.println(moo[0].length);//Prints the size of the Second Dimension in the array
    }

}

ซึ่งผลิตผลลัพธ์:

5
12

15

array.length คุณสมบัติสุดท้าย

มันเป็นทรัพย์สินสาธารณะและสุดท้าย มันเป็นสิ่งสุดท้ายเพราะอาร์เรย์ใน Java ไม่สามารถเปลี่ยนแปลงได้ตามขนาด (แต่ไม่แน่นอนโดยค่าขององค์ประกอบ)


14

อาร์เรย์เป็นวัตถุและมีฟิลด์ความยาว

String [] haha ​​= {"olle", "bulle"};

haha.length จะเท่ากับ 2


เพียงเพื่อ nitpick แต่ฉันเชื่อว่าอาร์เรย์ไม่ใช่วัตถุใน Java - มันเป็นหนึ่งในสองประเภทของตัวแปรอ้างอิง สิ่งมีชีวิตอื่น ๆ
jabbie

2
@jabbie: จริงเหรอ? คุณมีการอ้างอิงสำหรับสิ่งนั้นหรือไม่? ฉันถามเพียงเพราะคุณสามารถพูด Object o = new String [] {"hello"};
Simon Nickerson

Simon ฉันคิดว่าเหตุผลที่คำสั่งใช้งานได้เพราะพวกเขาแนะนำคลาสแบบ reflexive สำหรับชนิดดั้งเดิมทั้งหมด
Brian Sweeney

9
อ่านประโยคแรกของdocs.oracle.com/javase/specs/jls/se8/html/jls-10.htmlจากนั้นลองบอกเราว่าอาร์เรย์ไม่ใช่วัตถุ ;)
Michael Myers

1
คุณสามารถใช้ชื่อตัวแปรอื่น ๆ ได้มันทำให้ฉันเสียสมาธิมาก
Space Rocker

11

ในจาวามีlengthฟิลด์ที่คุณสามารถใช้กับอาเรย์เพื่อหาขนาดของมัน:

    String[] s = new String[10];
    System.out.println(s.length);

1
ขอขอบคุณที่ไม่เข้าร่วมด้านเทคนิคเกี่ยวกับสิ่งที่อาจเป็นหรืออาจจะไม่ใช่และเพียงแค่ให้คำตอบสั้น ๆ และกระชับ +1 สำหรับคุณ :)
Joshua Burns

9

หากคุณต้องการฟังก์ชั่นการทำเช่นนี้

Object array = new String[10];
int size = Array.getlength(array);

สิ่งนี้มีประโยชน์หากคุณไม่ทราบว่าคุณมีอาร์เรย์ประเภทใดเช่น int [], byte [] หรือ Object []


6

มีความแตกต่างระหว่างความยาวของStringและarrayเพื่อชี้แจง:

int a[] = {1, 2, 3, 4};
String s = "1234";

a.length //gives the length of the array

s.length() //gives the length of the string

สิ่งนี้ควรได้รับการปรับปรุงในคำถามหากมีการชี้แจง
Whitecat

5

คำตอบคือ "ทุกคน" อาร์เรย์ java ถูกจัดสรรด้วยจำนวนสล็อตองค์ประกอบที่คงที่ แอตทริบิวต์ "ความยาว" จะบอกคุณว่ามีจำนวนเท่าใด จำนวนนั้นไม่เปลี่ยนรูปไปตลอดชีวิตของอาเรย์ สำหรับการเทียบเท่าที่ปรับขนาดได้คุณจำเป็นต้องมีหนึ่งคลาส java.util.List ซึ่งคุณสามารถใช้เมธอด size () เพื่อค้นหาว่ามีการใช้งานองค์ประกอบจำนวนเท่าใด

อย่างไรก็ตามมี "ใช้งาน" แล้วมีใช้งานอยู่ ในอาเรย์คลาสอ็อบเจ็กต์คุณสามารถมีสล็อตอิลิเมนต์ที่องค์ประกอบเป็นวัตถุที่เป็นโมฆะดังนั้นแม้ว่าพวกเขาจะนับในแอตทริบิวต์ความยาว แต่คำจำกัดความของคนส่วนใหญ่พวกเขาไม่ได้ใช้งาน (YMMV ขึ้นอยู่กับแอปพลิเคชัน) ไม่มีฟังก์ชั่น builtin สำหรับคืนค่า null / non-null

รายการวัตถุมีคำจำกัดความอื่นของ "ใช้งาน" เพื่อหลีกเลี่ยงการสร้าง / ทำลายโครงสร้างการจัดเก็บข้อมูลพื้นฐานมากเกินไปโดยทั่วไปแล้วจะมีช่องว่างภายในคลาสเหล่านี้บางส่วน มันถูกใช้ภายใน แต่ไม่นับในวิธีการส่งคืนขนาด () และหากคุณพยายามเข้าถึงรายการเหล่านั้นโดยไม่ขยายรายการ (ผ่านวิธีการเพิ่ม) คุณจะได้รับข้อยกเว้นดัชนีที่ผิดกฎหมาย

ดังนั้นสำหรับรายการคุณสามารถมี "ใช้งาน" สำหรับองค์ประกอบที่ไม่เป็นโมฆะองค์ประกอบที่กำหนดทั้งหมด (รวมถึงองค์ประกอบที่เป็นโมฆะ) หรือองค์ประกอบทั้งหมดรวมถึงพื้นที่ส่วนขยายที่ได้รับการจัดสรรในปัจจุบัน


2

คำตอบทั้งหมดข้างต้นมีความเหมาะสม สิ่งสำคัญที่ต้องสังเกตคืออาร์เรย์มีคุณลักษณะความยาว แต่ไม่ใช่ความยาว เมื่อใดก็ตามที่คุณใช้สตริงและอาร์เรย์ใน java ทั้งสามรุ่นพื้นฐานที่คุณอาจเผชิญคือ:

  1. String s = new String ("vidyasagar");
    System.out.println (s.length ()); // ในกรณีนี้เราใช้ String เท่านั้น ไม่มีความยาวแอตทริบิวต์สำหรับสตริง เราต้องใช้วิธี length ()
  2. int [] s = new int [10]; System.out.println (s.length); // ที่นี่เราใช้คุณลักษณะความยาวของอาร์เรย์
  3. String [] s = new String [10];
    System.out.println (s.length); // ที่นี่แม้ว่าประเภทข้อมูลจะเป็น String แต่ก็ไม่ใช่ String เดี่ยว s คือการอ้างอิงสำหรับอาเรย์ของสตริง ดังนั้นเราจึงใช้คุณลักษณะความยาวของอาร์เรย์เพื่อแสดงว่ามีสตริงจำนวนเท่าใดที่สามารถใส่ในอาร์เรย์นั้นได้

1

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

จากนั้นคุณสามารถโทรหา size () เพื่อเพิ่มขนาด

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