一. Java String 类
字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。
创建字符串
创建字符串最简单的方式如下:
String greeting = "菜鸟教程";
在代码中遇到字符串常量时,这里的值是 "菜鸟教程",编译器会使用该值创建一个 String 对象。
和其它对象一样,可以使用关键字和构造方法来创建 String 对象。
String 类有 11 种构造方法,这些方法提供不同的参数来初始化字符串,比如提供一个字符数组参数:
public class StringDemo{ public static void main(String args[]){ char[] helloArray = { 'r', 'u', 'n', 'o', 'o', 'b'};
String helloString = new String(helloArray);
System.out.println( helloString );
}}
运行结果如下:
runoob
注意:String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了。
如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & StringBuilder 类。
字符串长度
用于获取有关对象的信息的方法称为访问器方法。
String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数。
下面的代码执行后,len变量等于14:
public class StringDemo {
public static void main(String args[]) {
String site = "www.runoob.com";
int len = site.length();
System.out.println( "菜鸟教程网址长度 : " + len );
}
}
运行结果如下:
菜鸟教程网址长度 : 14
String 方法
下面是 String 类支持的方法,更多详细,参看 Java String API文档:
二. 数组
数组是一种数据结构, 用来存储同一类型值的集合。通过一个整型下标可以访问数组中
的每一个值。
在声明数组数组变量时,需要指出数组类型(数据元素类型紧跟[])和数组变量名称:
int[] a; //声明了数组变量 a
该语句仅仅声明了变量a,并没有将a初始化为一个真正的数组,使用new运算符创建数组:
int[] a = new int[100];//这条语句创建了一个可以储存100个整数的数组
这个数组的下标从0~99,一旦创建了一个数组,就可以为这个数组赋值,例如使用一个循环:
int[] a = new int[100];
for(int i=0;i<100;i++){
a[i] = i;
}
注意
- 创建一个数字数组时,所有元素都被初始化为0。
- 创建一个boolen型的数组时,所有元素都被初始化为false。
- 创建一个对象型数组时,所有元素都被初始化为null,表示这些元素还未存放任何对象。
- 如果创建了一个 100 个元素的数组, 并且试图访问元素 a[100] (或任何在 0 ~ 99
之外的下标,) 程序就会引发“ array index out of bounds” 异常而终止执行。
要想获得数组中的元素个数,可以使用 array.length
。例如,
for (int i = 0; i < a.length; i ++)
System.out.println(a[i]);
一旦创建了数组, 就不能再改变它的大小(尽管可以改变每一个数组元素) 如果经常需
要在运行过程中扩展数组的大小, 就应该使用另一种数据结构—数组列表( array list)
for each 循环
Java 有一种功能很强的循环结构, 可以用来依次处理数组中的每个元素(其他类型的元
素集合亦可)而不必为指定下标值而分心。
这种增强的 for 循环的语句格式为:
for (variable : collection) statement
定义一个变量用于暂存集合中的每一个元素, 并执行相应的语句(当然, 也可以是语句块 )。
collection 这一集合表达式必须是一个数组或者是一个实现了 Iterable 接口的类对象(例如
ArrayList )。 例如:
int [] a ={1, 2, 3,4};
for (int element : a)
System.out.println(element);
打印数组 a 的每一个元素,一个元素占一行。
这个循环应该读作“ 循环 a 中的每一个元素”(for each element in a )。
提示:
有个更加简单的方式打印数组中的所有值, 即利用 Arrays 类的 toString 方法。 调
用 Arrays.toString(a), 返回一个包含数组元素的字符串, 这些元素被放置在括号内, 并
用逗号分隔, 例如,“ [2,3,5,7,11 ,13]”、 要想打印数组, 可以调用
System.out.println(Arrays.toString(a));
数组初始化以及匿名数组
在 Java中, 提供了一种创建数组对象并同时赋予初始值的简化书写形式。下面是一 例子:
int[] a = {2,3,5,7,11,13};
请注意, 在使用这种语句时,不需要调用 new。
甚至还可以初始化一个匿名的数组:
new int[] { 17, 19, 23, 29, 31, 37 }
这种表示法将创建一个新数组并利用括号中提供的值进行初始化, 数组的大小就是初始值的
个数。 使用这种语法形式可以在不创建新变量的情况下重新初始化一个数组。 例如:
small Primes = new int[] { 17, 19, 23, 29, 31, 37 };
数组拷贝
Java允许将一个数组变量拷贝给另一个数组变量。这时,两个数组变量将引用同一个数组(意味着改变其中一个数组的元素值,另一个数组的相同元素值也跟着改变):
public class Test {
public static void main(String[] args) {
int[] a = {1,2,3,4,5};
int[] b = a;
b[4] = 6;
System.out.print(a[4]);
}
}
运行结果如下:
6
如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用 Arrays 类的 copyOf
方法:
int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers, luckyNumbers.length) ;
第 2 个参数是新数组的长度。这个方法通常用来增加数组的大小:
luckyNumbers = Arrays.copyOf(luckyNumbers, 2 * luckyNumbers.length);
实例:
import java.util.*;
public class Test {
public static void main(String[] args) {
int[] a = {1,2,3,4,5};
int[] b= Arrays.copyOf(a,2*a.length);
b[4] = 6;
System.out.print(a[4]);
}
}
运行结果如下:
5
如果数组元素是数值型,那么多余的元素将被赋值为 0 ; 如果数组元素是布尔型, 则将赋值
为 false。相反, 如果长度小于原始数组的长度,则只拷贝最前面的数据元素。
数组排序
要想对数值型数组排序,可以用Array类中的sort方法:
int[] a = new int[100];
...
Arrays.sort(a);
这个方法使用了优化的快速排序算法。
下面来研究一个例子,这个例子使用了数组,它产生了一个抽彩游戏的随机数值组合:
package com.company;
import java.util.*;
public class Test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in) ;
//获取中奖号码总个数k
System.out.print("How many numbers do you need to draw? ");
int k = in.nextInt();
//获取奖池中的号码总数n
System.out.print("What is the highest number you can draw? ");
int n = in.nextInt();
/*
*k>n抛出数组越界异常
* if (k>n) {
* System.out.println("bad value!!!");
* return;
* }
*/
// 将奖池号码总个数填入数组numbers中
int[] numbers = new int[n];
for (int i = 0; i < numbers.length; i++)
numbers [i] =i + 1;
// 将中奖号码总个数填入数组result中
int[] result = new int[k];
for (int i = 0; i < result.length; i++)
{
//在0~n-1之间取得一个随机中奖号码
int r = (int) (Math.random() * n);
// pick the element at the random location
result[i] = numbers[r];
// move the last element into the random location
numbers[r] = numbers[n - 1] ;
n--;
} //print the sorted array
Arrays.sort(result);
System.out.println("Bet the following combination. It'll make you rich!");
for (int r : result)
System.out.println(r) ;
}
}
运行后可能的结果如下(假如从49个中抽取3个):
Bet the following combination. It'll make you rich!
8
9
11
注意
-
int r = (int)(Math.random() * n);
Math.random()会得出一个01之间的随机数,*n则范围变为0n,在经过(int)强制类型转换,舍去小数点后面的数字后范围变为0~n-1。 - numbers[r] = numbers[n - 1] ;
n--; 这两条语句保证了不会出现重复的中奖号码:用numbers数组的最后一个元素替代已选中的号码,然后删除最后一个元素。