举例讲解Java中数组和字符串类型的使用方法
Java数组
数组是具有相同数据类型的一组数据的集合,Java支持多为数组,一维数组的每个基本单元都是基本数据类型的数据,二维数组就是每个基本单元是一维数组的一维数组,以此类推,n维数组的每个基本单元都是n-1为数组的n-1维数组。下面以一维数组为例说明Java数组的用法。
1、数组声明
数组声明有如下两种形式(方括号的位置不同):
intarr[]; int[]arr2;
2、数组初始化
数组初始化也有两种形式,如下(使用new或不使用new):
intarr[]=newint[]{1,3,5,7,9}; int[]arr2={2,4,6,8,10};
3、遍历数组
遍历数组可用for/foreach,如下:
publicstaticvoidmain(String[]args){ intarr[]=newint[]{1,3,5,7,9}; int[]arr2={2,4,6,8,10}; for(inti=0;i<arr.length;++i){ System.out.print(arr[i]+"\t");//13579 } for(intx:arr2){ System.out.print(x+"\t");//246810 } }
4、Arrays.fill()填充数组
使用Arrays类的静态方法,需要import包java.util.Arrays,定义了许多重载方法。
voidfill(int[]a,intval)全部填充
voidfill(int[]a,intfromIndex,inttoIndex,intval)填充指定索引的元素
int[]arr3=newint[5]; for(intx:arr3){ System.out.print(x+"\t");//00000全部初始化为0 } System.out.println(); Arrays.fill(arr3,10); for(intx:arr3){ System.out.print(x+"\t");//1010101010全部填充为10 } System.out.println(); Arrays.fill(arr3,1,3,8); for(intx:arr3){ System.out.print(x+"\t");//10881010填充指定索引 } System.out.println();
5、Arrays.sort()对数组排序
voidsort(int[]a)全部排序
voidsort(int[]a,intfromIndex,inttoIndex)排序指定索引的元素
int[]arr4={3,7,2,1,9}; Arrays.sort(arr4); for(intx:arr4){ System.out.print(x+"\t");//12379 } System.out.println(); int[]arr5={3,7,2,1,9}; Arrays.sort(arr5,1,3); for(intx:arr5){ System.out.print(x+"\t");//32719 } System.out.println();
6、Arrays.copyOf()复制数组
int[]copyOf(int[]original,intnewLength)复制数组,指定新数组长度
int[]copyOfRange(int[]original,intfrom,intto)复制数组,指定所复制的原数组的索引
int[]arr6={1,2,3,4,5}; int[]arr7=Arrays.copyOf(arr6,5);//12345 int[]arr8=Arrays.copyOfRange(arr6,1,3);//23 for(intx:arr7){ System.out.print(x+"\t"); } System.out.println(); for(intx:arr8){ System.out.print(x+"\t"); } System.out.println();
Java字符串
Java字符串类型为String类,下面介绍如何操作字符串。
1、字符串连接
字符串连接使用“+”符号,如下例子:
Strings=newString("Hello"); Strings2=newString("World"); System.out.println(s+""+s2);//HelloWorld
2、获取字符串长度
获取字符串长度使用str.length(),如下例子:
Strings3=newString("HelloJava"); System.out.println(s3.length());//10
3、获取指定字符串的索引
获取指定字符串的索引使用str.indexOf(substr)、str.lastIndexOf(substr),如下例子:
Strings4=newString("howareyou"); System.out.println(s4.indexOf("o"));//1从头开始查找 System.out.println(s4.lastIndexOf("o"));//9从尾开始查找
4、获取指定索引的字符
获取指定索引的字符使用str.charAt(index),如下例子:
Strings5=newString("HelloJava"); System.out.println(s5.charAt(4));//o
5、去除字符串中的空格
去除字符串中的空格有多种方法,使用str.trim()或str.replaceAll(regex,replacement),也可以借用StringTokenizer类对字符串使用空格进行分隔,使用前需要import包java.util.StringTokenizer,如下例子:
Strings6=newString("HelloJava"); Strings7=s6.trim();//去除字符串开始、结尾处的空格 Strings8=s6.replaceAll("","");//替换字符串中的全部空格 StringTokenizerst=newStringTokenizer(s6,"");//使用空格分隔字符串 StringBuffersb=newStringBuffer(); while(st.hasMoreTokens()){ sb.append(st.nextToken()); } System.out.println("\""+s6+"\""+"length="+s6.length());//"HelloJava"length=14 System.out.println("\""+s7+"\""+"length="+s7.length());//"HelloJava"length=10 System.out.println("\""+s8+"\""+"length="+s8.length());//"HelloJava"length=9 System.out.println("\""+sb.toString()+"\""+"length="+sb.toString().length());//"HelloJava"length=9
6、替换字符串
替换字符串可以替换全部子串,也可以替换第一个子串,如下例子:
Stringsr=newString("abcabdbcd"); Stringsr2=sr.replace("ab","xx");//替换全部子串 Stringsr3=sr.replaceFirst("ab","xx");//替换第一个字串 System.out.println(sr2);//"xxcxxdbcd" System.out.println(sr3);//"xxcadbbcd"
7、字符串判等
字符串判等有多种情况,例如字符串内容判等、是否忽略大小写、内存地址判等、字符串开始或结尾处判断等,如下例子:
Stringse=newString("SummerissoHot"); Stringse1=newString("SummerissoHot"); Stringse2=newString("summerissohot"); Stringse3=se; System.out.println(se==se1);//false比较内存而非字符串内容 System.out.println(se==se3);//true System.out.println(se.equals(se1));//true比较字符串内容 System.out.println(se.equals(se2));//false System.out.println(se.equalsIgnoreCase(se2));//true忽略大小写 System.out.println(se2.startsWith("summer"));//true字符串开始 System.out.println(se2.endsWith("cold"));//false字符串结尾
8、字符串大小写转换
字符串大小写转换如下例子:
Stringsc=newString("helloWORLD"); Stringscl=sc.toLowerCase();//helloworld转换为小写 Stringscu=sc.toUpperCase();//HELLOWORLD转换为大写 System.out.println(scl+""+scu);
9、字符串分隔
字符串分隔如下例子:
Stringss=newString("abc,def,g,h"); String[]ss2=ss.split(",");//以逗号分隔 for(Stringx:ss2){ System.out.print(x+"\t");//abcdefgh }
10、格式化字符串
字符串格式化有多种形式,如日期格式化、时间格式化、进制转换等,Date类的使用需要import包java.util.Date,如下例子:
Dated=newDate(); System.out.println(d);//WedJul2216:00:36CST2015默认格式 System.out.println(String.format("%tm",d));//07两位数月份 System.out.println(String.format("%tH",d));//16两位24小时制 System.out.println(String.format("%x",256));//100十六进制
11、String、StringBuffer、StringBuilder类比较
String:字符串常量,不可变对象,变量内容改变时实际上是生成了一个新的String对象,当多次、频繁改变变量内容时,会对系统性能产生影响,特别是由此导致GC开始工作时,程序速度就会变的很慢。
StringBuffer:字符串变量,线程安全,变量内容改变时其实是对同一个对象进行操作,效率比String类型高。
StringBuilder:字符串变量,与StringBuffer兼容,却是非线程安全的,如果是单线程,优先使用StringBuilder,它比StringBuffer要快。