第六章 数组与字符串 §6.1 数组 §6.2 字符串
§6.1 数组 数组的创建 ( 一维数组和二维数组;基本数据类型和 复合数据类型) 1. 指定数组名称、数据类型 type var_name[]; 如: char s[]; Object o[]; int i[][];
§6.1 数组 2. 为数组分配内存空间 var_name = new type[size]; 如: s = new char[30]; o = new Object[2]; o[0] = new Object(); o[1] = new Object(); i = new int[2][3]; char s[] = new char[30]; 3. 初始化 int i1[][] = {{1,1},{2,3}}
§6.1 数组 数组的使用 ( 一维数组和二维数组;基本数据类型和复 合数据类型) 1. 数组元素表示: 数组名 [ 下标 ] , 数组名 [ 下标 1][ 下标 2], 数组名 [0]~ 数组名 [n-1] 2. Length 域 3. 一元数组元素的复制 = ; System.arraycopy(from fromIndex,to,toIndex,count)
§6.1 数组 — 示例 1 // InitArray.java: initializing an array import java.io.*; public class InitArray { public static void main( String args[] ) {int n[] = new int[ 10 ]; for ( int i = 0; i < n.length; i++ ) System.out.print( i + "\t" + n[ i ] + "\n "); }
§6.1 数组 — 示例 2 // InitArray.java import java.io.*; public class InitArray { public static void main( String args[] ) {int n[] = { 32, 27, 64, 18, 95, 14, 90, 70, 60,37 }; for ( int i = 0; i < n.length; i++ ) System.out.print( i + "\t" + n[ i ] + "\n“); }
§6.1 数组 — 示例 3 // InitArray.java import java.io.*; public class InitArray { public static void main( String args[] ) { final int ARRAY_SIZE = 10; int n[] = new int[ ARRAY_SIZE ]; for ( int i = 0; i < n.length; i++ ) n[ i ] = * i; for ( int i = 0; i < n.length; i++ ) System.out.print( i + "\t" + n[ i ] + "\n“); } }
// BubbleSort.java import java.applet.*; public class BubbleSort extends Applet { public void init() { int a[] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }; for ( int i = 0; i < a.length; i++ ) System.out.print( a[ i ]+ " " ); System.out.println( ); bubbleSort( a ); §6.1 数组 — 示例 4 (排序)
§6.1 数组 — 示例 4 for ( int i = 0; i < a.length; i++ ) System.out.print( a[ i ]+ " " ); } public void bubbleSort( int b[] ) { for ( int pass = 1; pass < b.length; pass++ ) for ( int i = 0; i < b.length - 1; i++ ) if ( b[ i ] > b[ i + 1 ] ) swap( b, i, i + 1 ); } public void swap( int c[], int first, int second ) { int hold; hold = c[ first ];
c[ first ] = c[ second ]; c[ second ] = hold; } public void bubbleSort( int b[] ) { for ( int pass = b.length - 1; pass > 0; pass-- ) { for ( int i = 0; i < pass; i++ ) if ( b[ i ] > b[ i + 1 ] ) swap(b,i,i + 1); } } §6.1 数组 — 示例 4
// JavaArrayUse.java public class JavaArrayUse { public static void main( String args[] ) { int i,j; int youngMaxLevel = 15; int young[][]; young = new int[youngMaxLevel][]; for ( i = 0; i < young.length; i++ ) young[i] = new int[i+1]; young[0] [0] = 1; §6.1 数组 — 示例 4( 杨辉三角型)
for ( i = 1; i < young.length; i++ ) {young[i][0] = 1; for ( j = 1; j < young[i].length-1; j++ ) young[i][j] = young[i-1][j-1]+young[i-1][j]; young[i][young[i].length-1] = 1; } for ( i = 0; i < young.length; i++ ) {for ( j = 0; j < young[i].length; j++ ) System.out.print(young[i][j]+" "); System.out.println(); } §6.1 数组 — 示例 4
§6.1 数组 — 示例 6 (读程序) import java.applet.Applet; public class PassArray extends Applet { public void init(){ int a[] = { 1, 2, 3, 4, 5 }; for ( int i = 0; i < a.length; i++ ) System.out.print ( a[ i ] + " " ); System.out.println( ); modifyArray( a ); for ( int i = 0; i < a.length; i++ ) System.out.print( a[ i ] + " " ); System.out.println( );
§6.1 数组 — 示例 6 (读程序) modifyElement( a[ 3 ] ); System.out.print( a[ 3 ]); } public void modifyArray( int b[] ) { for ( int j = 0; j < b.length; j++ ) b[ j ] *= 2; } public void modifyElement( int e ) { e *= 2; } }
§6.1 数组 — 示例 7 // Test.java public class Test { public static void main( String args[] ) { Point point = new Point( 7, 11 ); Circle circle = new Circle( 3.5, 22, 8 ); Cylinder cylinder = new Cylinder( 10, 3.3, 10, 10 ); Shape arrayOfShapes[]; arrayOfShapes = new Shape[ 3 ]; arrayOfShapes[ 0 ] = point;
§6.1 数组 — 示例 7 arrayOfShapes[ 1 ] = circle; arrayOfShapes[ 2 ] = cylinder; for ( int i = 0; i < arrayOfShapes.length; i++ ) { System.out.println("\n\n" + arrayOfShapes[ i ].getName() + ": " + arrayOfShapes[ i ].toString() ) }
§6.2 字符串 StringBuffer 类 字符串对象对象 不变字符串 可变字符 串 String 类 1. 创建字符串 2. 使用字符串
1. 创建字符串 方法 1 : new 方法 String str = new String(); String str = new String( 〝 This is a string 〞 ); StringBuffer str = new StringBuffer(10); 方法 2 :初始化方法 String str = 〝 This is a string 〞 ; String str ; str = 〝 This is a string 〞 ; 字符串常量:〝 hello world 〞
例 1 :构造方法 // StringConstructors.java public class StringConstructors { public static void main( String args[] ) { char charArray[] = { 'b', 'i', 'r', 't'}; byte byteArray[] = { (byte) 'n', (byte) 'e', (byte) 'w', (byte) 'r' }; String s, s1, s2, s3, s4, s5, s6; s = new String( "hello" ); s1 = new String(); s2 = new String( s );
例 1 :构造方法 s3 = new String( charArray ); s4 = new String( charArray, 1, 2 ); s5 = new String( byteArray, 1, 2 ); s6 = new String( byteArray ); System.out.print("s1 = " + s1 + "\ns2 = " + s2 + "\ns3 = " + s3 +"\ns4 = " + s4 + "\ns5 = " + s5 + "\ns6 = " + s6 + "\ns7 = " + s7);} }
例 2 :构造方法 public class StringBufferConstructors { public static void main( String args[] ) { StringBuffer buf1, buf2, buf3; buf1 = new StringBuffer(); buf2 = new StringBuffer( 10 ); buf3 = new StringBuffer( "hello" ); System.out.println( buf1.toString() ); System.out.println(buf2.toString() ); System.out.println(buf3.toString() ); } }
2. 使用字符串 String 类 访问: length(),charAt(),indexof(), lastIndexof(), getChars(), getBytes() 等 int len=str.length(); char c=str.charAt(i); int i = str.indexOf(‘a’); int i = str.lastIndexOf(‘a’); 修改: concat(),replace(),substring(), toLowerCase(), toUpperCase() 比较: equals(),equalsIgnoreCase(), CompareTo(), RegionMatches()
2. 使用字符串 StringBuffer 访问: length(),charAt(),getChars(), capacity(); int capa = str.capacity(); 修改: append(),insert(),setCharAt() str.append(“abc”); str.insert(4,“abc”); str.setChatAt(int,char); 字符串的转化 StringBuffer:toString(): 将可变字符串变成不变 字符串 String:valueOf(): 将不同类型的数字转化为不变字 符串 字符串的重载 : +
例 3 :方法使用 // StringCompare.java public class StringCompare { public static void main( String args[] ) { String s1, s2, s3, s4, output; s1 = new String( "hello" ); s2 = new String( "good bye" ); s3 = new String( "Happy Birthday" ); s4 = new String( "happy birthday" ); System.out.print( "s1 = " + s1 + "\ns2 = " + s2 +"\ns3 = " + s3 + "\ns4 = " + s4 + "\n\n ");
例 3 :方法使用 if ( s1.equals( "hello" ) ) System.out.print( "s1 equals \"hello\"\n "); else System.out.print( "s1 does not equal \"hello\"\n "); if ( s1 == "hello" ) System.out.print( "s1 equals \"hello\"\n "); else System.out.print( "s1 does not equal \"hello\"\n ");
例 3 :方法使用 if ( s3.equalsIgnoreCase( s4 ) ) System.out.print( "s3 equals s4\n "); else System.out.print( "s3 does not equal s4\n "); System.out.print( "\ns1.compareTo( s2 ) is " + s1.compareTo( s2 ) + "\ns2.compareTo( s1 ) is " + s2.compareTo( s1 ) + "\ns1.compareTo( s1 ) is " + s1.compareTo( s1 ) + "\ns3.compareTo( s4 ) is " + s3.compareTo( s4 ) + "\ns4.compareTo( s3 ) is " + s4.compareTo( s3 ) + "\n\n ");
例 3 :方法使用 if ( s3.regionMatches( 0, s4, 0, 5 ) ) System.out.print( "First 5 characters of s3 and s4 match\n "); else System.out.print( "First 5 characters of s3 and s4 do not match\n "); if ( s3.regionMatches( true, 0, s4, 0, 5 ) ) System.out.print( "First 5 characters of s3 and s4 match "); else System.out.print( "First 5 characters of s3 and s4 do not match ); }
例 4 :方法使用 public class Test{ String myString = “2”; public static void main(String args[]) { Test myObj = new Test() myObj.stringModifier(myObj.myString); System.out.println(“ ” + myObj.myString); } void stringModifier (String theString) { theString = theString + “3”; System.out.print(theString); }
内容要点 数组的创建及使用 字符串的创建及使用
习题 1. 随机产生十个数进行降序排序。 2. 修改例子中的冒泡排序,以提高性能。 3. 命令行参数的使用 : 从命令行输入需要排 序的个数, 将随机产生的数进行升序排序。 4. 编写一个应用程序,读入 如 07/21/1999 格式的日期,打印出如 July 21 , 1999 格式的日期。 5. 拼写检查器。
// StringTest.java public class StringTest { public static void main( String args[] ) { String s = new String( "07/21/1999" ); String s1 = s.substring(0,2); int m = Integer.parseInt( s1 ); switch(m){ case 1 :System.out.print("January "+ s.substring(3,5)+ ","+s.substring(6,10)); break;
case 2 :System.out.print("February "+s.substring(3,5)+","+s.substring(6,10)); break; case 3 :System.out.print("March "+s.substring(3,5)+","+s.substring(6,10)); break; case 4 :System.out.print("April "+s.substring(3,5)+","+s.substring(6,10)); break; case 5 :System.out.print("May "+s.substring(3,5)+","+s.substring(6,10)); break; case 6 :System.out.print("June "+s.substring(3,5)+","+s.substring(6,10)); break; case 7 :System.out.print("July "+s.substring(3,5)+","+s.substring(6,10)); break; }
case 8 :System.out.print("August "+s.substring(3,5)+","+s.substring(6,10)); break; case 9 :System.out.print("September "+s.substring(3,5)+","+s.substring(6,10)); break; case 10 :System.out.print("October "+s.substring(3,5)+","+s.substring(6,10)); break; case 11 :System.out.print("November "+s.substring(3,5)+","+s.substring(6,10)); break; case 12 :System.out.print("December "+s.substring(3,5)+","+s.substring(6,10)); break;}} }