第九讲 Java中的数组和字符串
主要内容 Java中的数组 String和StringBuffer字符串 Java中命令行参数的用法 |
Java中的数组
“数组是相同类型的、用一个标识符名称封装在一起的一个对象序列或基本类型数据序列。”
数组的基本认识
² 数组是一种引用数据类型,是对象,要先创建后存取。
² 一个数组可存储相关的、同一种数据类型的数据。其中元素可以是简单数据也可以是对象数据。
² 数组中还特别含有成员变量length有成,用于测得数组的尺寸。
length |
元素0 |
元素1 |
…… |
元素(n-1) |
² 数组的长度在创建数组时确定,一旦创建,数组即固定尺寸。
数组的声明和创建
数组的声明
类型[] 数组名;
如:int[] list; //也可以写成int list[];
说明:数组可以变界定义。
int n=10;
int[] d=new int[n];
数组的创建
数组名 = new 类型[数组尺寸];
数组名 = new类型[]{元素1,元素2,……,元素n};
其中: new类型[]可以省略。
如:
int[] a= new int[12];
int[] a= {1, 2, 3, 4, 5};
String[] daysOfWeek = {"Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "Sunday"};
class TestArray{
public static void main(String[] aa){
int[] a={1,2,3,4,5};
for(int i=0;i<a.length;i++){
a[i]*=2;
System.out.print(a[i]+"\t");
}
}
}
结论:
² 数组的下标下界为0。
² 对数组各元素的访问通过循环进行。
思考 1. 数组是对象吗? 2. 数组对象中哪个成员变量可以测得数组中元素个数? 3. 如果定义int[] b=new b[10];,b中的数组元素分别是? 4. 数组中的数据可否是不同的类型? 5. 数组中只能存放基本类型的数据吗? |
数组初始化
² 声明和创建可以一起完成,这即为数组的初始化。
² 可以在初始化时,给数组元素直接赋值。
int[] a={1,2,3,4,5};——√
int []a=new int[5];
a={1,2,3,4,5}; ——╳
² 数组元素的默认值情况同对象的成员变量:
数值型-----0
char-------空字符(ASC码值为0)
String------null
boolean-----false
² 如果没进行初始化,则需要单个元素进行输入了。
²
练习1:生成菲波那契数列的前20项,置入数组中,并输出。
class Fei{
int n;
int[] f;
Fei(int x){
}
void printFei(){
}
public static void main(String[] aa){
Fei fei=new Fei(20);
fei.printFei();
}
}
练习2:创建数组并取值为100以内的随机整数,输出生成的数组,并排序输出。
import java.util.*;
class RandomArray{
int n;
int[] ra;
RandomArray(int x){
Random rd=new Random();
}
void printArray(){
}
public static void main(String[] aa){
}
}
数组引用
² 数组引用即数组名,由此可访问数组中的每个元素。
访问形式:数组名[index]
² 数组引用可以重指向
class A{
public static void main(String[] a){
int[] b={0,1};
int[] c={1,2,3,4};
b=c;
for(int i=0;i<b.length;i++)
System.out.println(b[i]);
}
}
数组元素为对象
当数组元素是对象时,每个数组元素都是对象引用
class Circle{
double r;
Circle(double r){ this.r=r; }
double getS(){return Math.PI*r*r; }
}
class Test{
public static void main(String[] aa){
Circle[] cc=new Circle[5];
double[] a={1,2,2.5,3.5,6};;
for(int i=0;i<5;i++){
cc[i]=new Circle(a[i]);
System.out.println(cc[i].r+"---"+cc[i].getS());
}
}
}
思考 1. 数组元素可以是对象吗? 2. 数组元素是对象的数组如何定义? 3. 数组可以是对象的成员吗? 4. 如何访问对象中的数组元素? |
String和StringBuffer字符串
² 字符串是有序的字符序列。如”Hello”
² 字符串常量以双引号为起止符。
² 字符串可通过length()方法测得串长。
如:int l=”a try”.length();
字符串中若要包含引号、换行符,就需要用到特殊字符。列表如下:
特殊字符 |
表示 |
\' |
单引号字符 |
\" |
双引号字符 |
\\ |
反斜杠 |
\t |
制表符(tab) |
\b |
退格 |
\n |
换行 |
如:String s=”Li say:\n\t\”It’s a try.\””;
String字符串
构造字符串实例对象的方法
² 直接赋字符串值
String s=”java”;
² new String(参数列表)
String s1=new String();
String s2=new String(“java”);
字符串池
² 所有的字符串实例对象都在一个“字符串池”中。
² 字符串变量是指向字符串对象的引用。
² 字符串常量也是字符串实例对象的一个引用。
常用的字符串相关方法
² 对字符串内字符的访问
public char charAt(int index)
从调用方法的字符串对象中返回序数为index的字符。
class TestString{
public static void main(String[] aa){
String s="Hello world";
for(int i=0;i<s.length();i++)
System.out.print(s.charAt(i)+" ");
}
}
² 字符串比较
n equal方法
public boolean equals(String anotherString)
作用:比较两个字符串值是否相等。
class TestEqual{
public static void main(String[] aa){
String s1=new String("abc");
String s2=new String("abc");
if(s1.equals(s2))System.out.println("equal");
else System.out.println("not equal");
}
}
n ==
作用:比较两个字符串对象是否为同一个。
class TestEqual{
public static void main(String[] aa){
String s1=new String("abc");
String s2=new String("abc");
if(s1==s2)System.out.println("equal");
else System.out.println("not equal");
}
}
n compareTo方法
public int compareTo(String anotherString)
作用:比较两个字符串的值大小
如:String aa=”abc”,bb=”ABC”;
aa.compareTo(bb)
其值为正,aa大于bb;其值为负,aa小于bb;其值为零,aa等于bb
练习:分析程序运行结果
class StringTest{
public static void main(String[] aa){
String s1=new String("a try");
String s2="a try";
String s3=s1;
System.out.println(s1==s2);
System.out.println(s2==s3);
System.out.println(s1==s3);
System.out.println(s1.equals(s2));
System.out.println(s2.equals(s3));
System.out.println(s3.equals(s1));
System.out.println(s1.compareTo(s2));
System.out.println(s2.compareTo(s3));
System.out.println(s3.compareTo(s1));
}
}
思考 1. Java中的字符串是对象吗? 2. new String(“abc”)是否总是会在字符串池中新建字符串对象? 3. 测试字符串长度的方法是? 4. 如何比较两个字符串对象是否有相同的值? 5. 如何比较两个字符串对象是否为同一对象? |
字符串与数值的转换
Integer.parseInt(String s)
将字符串转成int型整数
Byte.parseByte(String s)
将字符串转成byte型整数
Short.parseShort(String s)
将字符串转成short型整数
Long.parseLong(String s)
将字符串转成long型整数
Float.parseFloat(String s)
将字符串转成float型整数
Double.parseDouble(String s)
将字符串转成double型整数
返回字符或子字符串位置的方法
public int indexOf(int ch)
public int lastIndexOf(int ch)
public int indexOf(String s)
public int lastIndexOf(String s)
StringBuffer字符串
class StringTest{
public static void main(String[] aa){
String s="a=100";
s+="\t";
s+="b=200";
System.out.println(s);
}
}
讨论:该程序运行过程中,字符串池中共创建对象数?
String对象一经创建,不能对其内容修改。消耗资源。
StringBuffer对象是可变的字符串,可用于创建和操作动态字符串信息。为该对象分配的内存会自动扩展以容纳新增的文本。
StringBuffer对象创建
有三种方法:使用初始化字符串、设定大小以及使用默认构造函数:
new StringBuffer(String s);
new StringBuffer(int size);
new StringBuffer();
//用默认的构造方法时默认容量为16个字符。
class StringBuffer1{
public static void main(String[] aa){
StringBuffer s=new StringBuffer();
s.append("www");
s.append(".szit");
s.append(".edu");
s.append(".com\n");
s.append(100);
System.out.println(s);
}
}
StringBuffer类的常用方法
² 转换成String
public void toString()
² 添加数据到对象
public void append(……)
在字符串末尾追加数据(有多个重载版本)
public void insert(int offset,插入数据)
在字符串指定位置插入数据(有多个重载版本)。
² 删除和替代
public void delete(int start, int end)
删除指定位置上的子字符串。
public void replace(int start, int end,String s)
以指定字符串替换指定位置上的字符。
返回字符或子字符串位置的方法
public int indexOf(int ch)
public int lastIndexOf(int ch)
public int indexOf(String s)
public int lastIndexOf(String s)
练习:用StringBuffer,按程序运行结果对应的步骤编程。
1) 创建一个初始的StringBuffer对象;
2) 在末尾加上字符串,再加上数值;
3) 在恰当的位置插入“Buffer”
4) 删除数值
² 单个字符处理
public char CharAt(int index)
返回字符串中的单个字符。
public void SetCharAt(int index,char ch)
为字符串中的单个字符赋值或进行替换。
public StringBuffer deleteCharAt(int index)
删除指定位置的字符
² 字符串的倒序处理
public StringBuffer reverse()
StringBuffer实例的容量
public int length():测量字符序列长度
public int capacity():占用内存尺寸(实例容量)
思考 1. String与StringBuffer区别在哪? 2. 怎样由String字符串对象得到StringBuffer对象? 3. StringBuffer字符串如何转为String字符串? 4. 如何在StringBuffer字符串末尾进行添加数据? 5. 如何在StringBuffer字符串中插入? 6. 如何从StringBuffer字符串中删除子串? |
Java中命令行参数的用法
main方法中的参数
public static void main( String[] args )
String[] args——字符串数组
main方法可接收字符串数组,作为运行时给出的数据
参数的使用
args[0]——第一个参数
args[1]——第二个参数
……
带参数的程序执行
java 类名 <参数表>
命令行参数使用练习
练习1:设计自然数累加程序(类名Sum),当java sum 68时可求自然数加到68的和。
练习2:设计一个加法器程序(类名:Addition),如:java Addition 1 5 7,能获得答案13。