-----------------------------知识点1-------------------------------------
package cn.itcast_01;
/*
-
线程安全(多线程讲解)
-
安全–同步–数据是安全的
-
不安全–不同步–效率高一些
-
安全:银行的网站
-
效率:新闻网站,讨论子类的
-
StringBuffer:
-
线程安全的可变字符串。
-
StringBuffer和String的区别是:
-
前者的的长度和内容可变,后者的内容和长度不可变
-
如果用StringBuffer来做字符拼接,不会浪费太多资源。
-
StringBuffer的构造方法:
-
public StringBuffer() :无参构造方法
public StringBuffer(int capacity):指定容量的字符串缓冲区对象
public StringBuffer(String str):指定字符串内容的字符串缓冲区对象 -
StringBuffer的方法:
-
public int capacity():返回当前容量。理论值
-
public int length():返回实际值
-
*/
public class StringBufferDemo {
public static void main(String[] args) {
// public StringBuffer() :无参构造方法
StringBuffer sb = new StringBuffer();
System.out.println(“sb”+sb);
System.out.println(“sb的当前容量:”+sb.capacity());
System.out.println(“sb的实际长度:”+sb.length());
System.out.println("-------------------------");// public StringBuffer(int capacity):指定容量的字符串缓冲区对象 StringBuffer sb1 = new StringBuffer(212); System.out.println("sb1"+sb1); System.out.println("sb1的当前容量:"+sb1.capacity()); System.out.println("sb1的实际长度:"+sb1.length()); System.out.println("-------------------------"); //public StringBuffer(String str):指定字符串内容的字符串缓冲区对象 StringBuffer sb2 = new StringBuffer("hello"); System.out.println("sb2"+sb2); System.out.println("sb2的当前容量:"+sb2.capacity()); System.out.println("sb2的实际长度:"+sb2.length()); System.out.println("-------------------------");
}
}
-----------------------------知识点2-------------------------------------
package cn.itcast_02;
/* -
StringBuffer的添加功能:
-
public StringBuffer append(String str):可以把任意数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
-
public StringBuffer insert(int offset,String str):可以指定位置把任意类型的数据插入到字符串缓冲区里面,返回字符串缓冲区本身
-
*/
public class StringBufferDemo {
public static void main(String[] args) {
// 创建字符串缓冲区对象
StringBuffer sb = new StringBuffer();// 调用添加功能 StringBuffer sb2 = sb.append("hello"); System.out.println("sb:"+sb); System.out.println("sb2:"+sb2); System.out.println(sb == sb2);// true System.out.println("-------------------------"); // 一步一步添加
// sb.append(123);
// sb.append(232.213);
// sb.append(true);
// System.out.println(“sb:”+sb);
// System.out.println("-------------------------");
//
// 链式编程添加
sb.append(123).append(232.213).append(true);
System.out.println(“sb:”+sb);
System.out.println("-------------------------");
// public StringBuffer insert(int offset,String str):可以指定位置把任意类型的数据插入到字符串缓冲区里面,返回字符串缓冲区本身
sb.insert(5,"hello");
System.out.println("sb:"+sb);
System.out.println("------------------------");
}
}
-----------------------------知识点3-------------------------------------
package cn.itcast_03;
/*
-
public StringBuffer deleteCharAt(int index):删除指定索引位置的字符,并返回本身
public StringBuffer delete(int start,int end):删除指定开始到结束的索引的字符,并返回本身 -
*/
public class StringBufferDemo {
public static void main(String[] args) {
// 创建对象
StringBuffer sb = new StringBuffer();sb.append("hello").append("java").append(123); //public StringBuffer deleteCharAt(int index):删除指定索引位置的字符,并返回本身 sb.deleteCharAt(0); System.out.println("sb:"+sb); //public StringBuffer delete(int start,int end):删除指定开始到结束的索引的字符,并返回本身 sb.delete(1, 3); System.out.println("sb:"+sb); // 删除所有 sb.delete(0, sb.length());
}
}
-----------------------------知识点4-------------------------------------
package cn.itcast_04;
/* -
替换功能
public StringBuffer replace(int start,int end,String str) // 替换start到end之间的数据,用str替代,包左不包右 -
*/
public class StringBufferDemo {
public static void main(String[] args) {
// 创建字符串缓冲区对象
StringBuffer sb = new StringBuffer();// 添加字符串 sb.append("hello").append("java").append(123); System.out.println("sb:"+sb); // public StringBuffer replace(int start,int end,String str) sb.replace(0, 5, "Hello"); System.out.println("sb:"+sb);
}
}
-----------------------------知识点5-------------------------------------
package cn.itcast_05;
/* -
反转功能 public StringBuffer reverse()
-
*/
public class StringBufferDemo {
public static void main(String[] args) {
// 创建字符串缓冲区对象
StringBuffer sb = new StringBuffer();// 添加字符串 sb.append("hello").append("java").append(123); System.out.println("sb:"+sb); // public StringBuffer reverse() sb.reverse(); System.out.println("sb:"+sb);
}
}
-----------------------------知识点6-------------------------------------
package cn.itcast_06;
/* -
截取功能
public String substring(int start) :截取功能,返回一个String类型数据
public String substring(int start,int end):截取功能,从start开始到end结束,返回一个String类型数据 -
*/
public class StringBufferDemo {
public static void main(String[] args) {
// 创建字符串缓冲区对象
StringBuffer sb = new StringBuffer();// 添加字符串 sb.append("hello").append("java").append(123); System.out.println("sb:"+sb); // public String substring(int start) :截取功能,返回一个String类型数据 String s = sb.substring(1); System.out.println("sb:"+sb); System.out.println("s:"+s); System.out.println("------------------"); // public String substring(int start,int end):截取功能,从start开始到end结束,返回一个String类型数据 String s2 = sb.substring(5,9); System.out.println("sb:"+sb); System.out.println("s2:"+s2);
}
}
-----------------------------知识点7-------------------------------------
package cn.itcast_07;
/* -
为什么要讲解类之间的转换:
-
A—B的转换
-
我们把A转换成B,为了使用B的功能
-
B–A的转换
-
我们可能需要的结果是A类型,所以还得转回来
-
String和StringBuffer的相互转换:
-
*/
public class StringBufferTest {
public static void main(String[] args) {
// 定义一个字符串
String s = “hello world”;// 将String类型转化成StringBuffer类型 方式1 通过构造方法 StringBuffer sb = new StringBuffer(s); System.out.println("sb:"+sb); System.out.println("----------------------"); // 将String类型转化成StringBuffer类型 方式2 通过append方法 StringBuffer sb1 = new StringBuffer(); sb1.append(s); System.out.println("sb1:"+sb1); System.out.println("----------------------"); // 将StringBuffer类型转化String成类型 方式1 通过toString()方法 String s1 = sb.toString(); System.out.println("s1:"+s1); System.out.println("----------------------"); // 将StringBuffer类型转化String成类型 方式2 String的构造方法 String s2 = new String(sb); System.out.println("s2:"+s2); System.out.println("----------------------"); System.out.println("sb:"+sb);
}
}
-----------------------------知识点8-------------------------------------
package cn.itcast_07;
/* -
把数组拼接成一个字符串
-
*/
public class StringBufferTest2 {
public static void main(String[] args) {
// 定义一个数组
int [] arr = {1,2,3,4,5,6};// 方法1 String s1 = StringBufferTest2.ArrayToString(arr); System.out.println("s1:"+s1); System.out.println("-------------------"); // 方法2 String s2 = StringBufferTest2.BufferArrayToString(arr); System.out.println("s2:"+s2); System.out.println("-------------------");
}
// 方法1 通过String类中的方法进行拼接
public static String ArrayToString(int [] arr){
String s = “”;
s +="[";
for(int x=0;x<arr.length;x++){
if(x==arr.length-1){
s += arr[x];
}else{
s += arr[x];
s +=", ";
}}
s +="]";
return s;
}// 方法2 通过BufferString中的拼接
public static String BufferArrayToString(int [] arr){
// 创建StringBuffer
StringBuffer sb = new StringBuffer();
sb.append("[");
for(int x=0;x<arr.length;x++){
if(x==arr.length-1){
sb.append(arr[x]);
}else{
sb.append(arr[x]);
sb.append(", “);
}
}
sb.append(”]");// 将StringBuffer类型转换成String类型 // 方式1 通过toString方法 //String s = sb.toString(); // return s; // 方式2 通过构造方法 String s2 = new String(sb); return s2;
}
}
-----------------------------知识点9-------------------------------------
package cn.itcast_07;
/*
- 字符串反转
- */
import java.util.Scanner;
public class StringBufferTest3 {
public static void main(String[] args) {
// 创建键盘录入
Scanner sc = new Scanner(System.in);
System.out.println(“请输入要反转的字符串:”);
String s = sc.nextLine();
// 方式1 通过String进行拼接
System.out.println("反转后的结果:");
System.out.println(StringBufferTest3.ReverseString(s));
System.out.println("--------------------------");
// 方式2 通过tringBuffer类的reverse方法进行反转
System.out.println("反转后的结果:");
System.out.println(StringBufferTest3.ReverseString2(s));
System.out.println("--------------------------");
}
// 方式1 通过String进行拼接
public static String ReverseString(String s){
String s1 = "";
for(int x=s.length()-1;x>=0;x--){
s1 +=s.charAt(x);
}
return s1;
}
// 方式2 通过StringBuffer类的reverse方法
public static String ReverseString2(String s){
StringBuffer sb = new StringBuffer(s);
return sb.reverse().toString();
}
}
-----------------------------知识点10-------------------------------------
package cn.itcast_07;
import java.util.Scanner;
/*
-
判断一个字符串是否是对称字符串
例如"abc"不是对称字符串,“aba”、“abba”、“aaa”、"mnanm"是对称字符串 -
方法1:
-
将字符串反转,如果反转后的字符串和未反转的字符串相等则是对称字符串,返回true,否则返回
-
false。
-
方法 2 :
-
将字符串的第一个和最后一个比较
-
将字符串的第二个和倒数第二个比较
-
。。。
-
*/
public class StringBufferTest4 {
public static void main(String[] args) {
// 创建字符串键盘录入
Scanner sc = new Scanner(System.in);
// 提示输入信息
System.out.println(“请输入字符串:”);
// 接收键盘录入数据
String s = sc.nextLine();// 调用方法1 System.out.println(StringBufferTest4.Compare(s)); System.out.println("--------------------------"); // 调用方法2 System.out.println(StringBufferTest4.Compare2(s)); System.out.println("--------------------------");
}
// 方法1
public static boolean Compare(String s){
// 创建字符串缓冲区对象
StringBuffer sb = new StringBuffer(s);
return (s.equals(sb.reverse().toString()));
}// 方法2
public static boolean Compare2(String s){
char arr [] = s.toCharArray();
boolean flag = true;
for(int start =0,end=arr.length-1;start<=end;start++,end–){
if(arr[start] != arr[end]){
flag = false;
break;
}
}
return flag;}
}
-----------------------------知识点11-------------------------------------
package cn.itcast_08;
/* -
面试题:
-
1.String,StringBuffer,StringBulid的区别?
-
a.String的内容是不可变的,而StringBuffer,StringBuilder都是可变的
-
b.StringBuffer是同步的,数据安全的,效率低的;StringBuilder是不同步的,数据不安全的,效率高
-
2.StringBuffer和数组的区别
-
二者都可以看做是一个容器,装其他的数据
-
但是呢,StringBuffer的数据最终是一个字符串数据
-
而数组必须放同一种类型的数据
-
3.形式参数的问题
-
String 做为参数传递
-
StringBuffer做为参数传递
-
形式参数:
-
基本类型:形式参数的改变不影响实际参数
-
引用类型:形式参数的改变直接影响实际参数
-
注意:
-
String做为参数传递,效果和基本类型做为参数传递是一样的。
-
*/
public class StringBufferDemo {
public static void main(String[] args) {
String s1 = “hello”;
String s2 = “world”;
int num1 = 1;
int num2 = 2;
StringBuffer sb1 = new StringBuffer(“hello”);
StringBuffer sb2 = new StringBuffer(“world”);System.out.println(s1+"---"+s2); // hello---world System.out.println(num1+"---"+num2); System.out.println(sb1+"---"+sb2); // hello---world System.out.println("-------------------"); change(s1,s2); change(num1,num2); change(sb1,sb2); System.out.println(s1+"---"+s2); // hello---world System.out.println(num1+"---"+num2); System.out.println(sb1+"---"+sb2); // hello---worldworld
}
public static void change(String s1,String s2){
s1 = s2;
s2 = s2+s1;
}public static void change(int num1,int num2){
num1 = num2;
num2 = num1+num2;
}public static void change(StringBuffer sb1,StringBuffer sb2){
sb1 = sb2;
sb2 = sb2.append(sb1);
}
}
-----------------------------知识点12-------------------------------------
package cn.itcast_01;
/* -
需求1:计算100的二进制,八进制,十六进制
-
需求2:判断一个数据是否是int范围内的
-
public static String toBinaryString(int i) 将int数据转换成二进制
public static String toOctalString(int i) 将int数据转换成八进制
public static String toHexString(int i) 将int数据转换成十六进制 -
为了对基本数据类型进行更多的操作,更方便的操作,Java就针对每一种基本数据类型提供了对应的类类型。包装类类型。
-
byte Byte
-
short Short
-
int Integer
-
long Long
-
float Float
-
double Double
-
char Character
-
boolean Boolean
-
*/
public class IntergerDemo {
public static void main(String[] args) {
//public static String toBinaryString(int i) 将int数据转换成二进制
System.out.println(“100d的二进制:”+Integer.toBinaryString(100));
//public static String toOctalString(int i) 将int数据转换成八进制
System.out.println("100d的八进制:"+Integer.toOctalString(100));
//public static String toHexString(int i) 将int数据转换成十六进制
System.out.println("100d的十六进制:"+Integer.toHexString(100));
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
}
}
-----------------------------知识点13-------------------------------------
package cn.itcast_02;
/*
-
Integer的构造方法:
-
public Integer(int value)
-
public Integer(String s)
-
注意:这个字符串必须是由数字字符组成
-
*/
public class IntegerDemo {
public static void main(String[] args) {
// 方式1
int i = 100;
Integer ii = new Integer(i);
System.out.println(“ii:” + ii);// 方式2 String s = "100"; // NumberFormatException // String s = "abc"; Integer iii = new Integer(s); System.out.println("iii:" + iii);
}
}
-----------------------------知识点14-------------------------------------
package cn.itcast_03;
/*
- int类型和String类型的相互转换
- int – String
-
String.valueOf(number)
- String – int
-
Integer.parseInt(s)
*/
public class IntegerDemo {
public static void main(String[] args) {
// int – String
int number = 100;
// 方式1
String s1 = “” + number;
System.out.println(“s1:” + s1);
// 方式2
String s2 = String.valueOf(number);
System.out.println(“s2:” + s2);
// 方式3
// int – Integer – String
Integer i = new Integer(number);
String s3 = i.toString();
System.out.println(“s3:” + s3);
// 方式4
// public static String toString(int i)
String s4 = Integer.toString(number);
System.out.println(“s4:” + s4);
System.out.println("-----------------");
// String -- int
String s = "100";
// 方式1
// String -- Integer -- int
Integer ii = new Integer(s);
// public int intValue()
int x = ii.intValue();
System.out.println("x:" + x);
//方式2
//public static int parseInt(String s)
int y = Integer.parseInt(s);
System.out.println("y:"+y);
}
}
-----------------------------知识点15-------------------------------------
package cn.itcast_04;
/*
-
常用的基本进制转换
-
public static String toBinaryString(int i)
-
public static String toOctalString(int i)
-
public static String toHexString(int i)
-
十进制到其他进制
-
public static String toString(int i,int radix)
-
由这个我们也看到了进制的范围:2-36
-
为什么呢?0,…9,a…z
-
其他进制到十进制
-
public static int parseInt(String s,int radix)
*/
public class IntegerDemo {
public static void main(String[] args) {
// 十进制到二进制,八进制,十六进制
System.out.println(Integer.toBinaryString(100));
System.out.println(Integer.toOctalString(100));
System.out.println(Integer.toHexString(100));
System.out.println("-------------------------");// 十进制到其他进制 System.out.println(Integer.toString(100, 10)); System.out.println(Integer.toString(100, 2)); System.out.println(Integer.toString(100, 8)); System.out.println(Integer.toString(100, 16)); System.out.println(Integer.toString(100, 5)); System.out.println(Integer.toString(100, 7)); System.out.println(Integer.toString(100, -7)); System.out.println(Integer.toString(100, 70)); System.out.println(Integer.toString(100, 1)); System.out.println(Integer.toString(100, 17)); System.out.println(Integer.toString(100, 32)); System.out.println(Integer.toString(100, 37)); System.out.println(Integer.toString(100, 36)); System.out.println("-------------------------"); //其他进制到十进制 System.out.println(Integer.parseInt("100", 10)); System.out.println(Integer.parseInt("100", 2)); System.out.println(Integer.parseInt("100", 8)); System.out.println(Integer.parseInt("100", 16)); System.out.println(Integer.parseInt("100", 23)); //NumberFormatException //System.out.println(Integer.parseInt("123", 2));
}
}
-----------------------------知识点16-------------------------------------
package cn.itcast_05;
/* -
JDK5的新特性
-
自动装箱:把基本类型转换成包装类类型
-
自动拆箱:把包装类类型转换为基本类型
-
*/
public class IntegerDemo {
public static void main(String[] args) {
// 定义一个int类型的包装类类型数据i
Integer ii = new Integer(100);
ii +=200;
System.out.println(“ii:”+ii);// 反编译代码 // 通过反编译后的代码 // Integer ii = Integer.valueOf(100); //自动装箱 // ii = Integer.valueOf(ii.intValue() + 200); //自动拆箱,再自动装箱 // System.out.println((new StringBuilder("ii:")).append(ii).toString()); Integer iii = null; // NullPointerException if (iii != null) { iii += 1000; System.out.println(iii); }
}
}
-----------------------------知识点17-------------------------------------
package cn.itcast_06;
/* -
注意:Integer的数据直接赋值,如果在-128到127之间,会直接从缓冲池里获取数据
-
*/
public class IntergerDemo {
public static void main(String[] args) {
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1==i2);
System.out.println(i1.equals(i2));
System.out.println("-----------------------");Integer i3 = new Integer(128); Integer i4 = new Integer(128); System.out.println(i3==i4); System.out.println(i3.equals(i4)); System.out.println("-----------------------"); Integer i5 = 128; Integer i6 = 128; System.out.println(i5==i6); System.out.println(i5.equals(i6)); System.out.println("-----------------------"); Integer i7 = 127; Integer i8= 127; System.out.println(i7==i8); System.out.println(i7.equals(i8)); System.out.println("-----------------------"); // 通过查看源码,我们就知道了,针对-128到127之间的数据,做了一个数据缓冲池,如果数据是该范围内的,每次并不创建新的空间 // Integer ii = Integer.valueOf(127);
}
}
-----------------------------知识点18-------------------------------------
package cn.itcast_01;
/* -
冒泡排序法的代码实现
-
int [] arr = {1,2,3,4,9,6,8,7,5,10};
-
实现从大到小排序
-
*/
public class ArrayDemo {
public static void main(String[] args) {
int [] arr = {1,2,3,4,4,9,6,8,7,5,10};
System.out.println(MaoPao(arr));}
public static String MaoPao(int [] arr){
// 数组的冒泡排序
for(int x =0;x<arr.length-1;x++){
for(int y=x+1;y<arr.length;y++){
if(arr[x] >= arr[y]){
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}// 输出数组,采用字符拼接的方法 String s = "["; for(int x=0;x<arr.length;x++){ if(x==arr.length-1){ s +=arr[x]; }else{ s +=arr[x]; s +=", "; } } s +="]"; return s;
}
}
-----------------------------知识点19-------------------------------------
package cn.itcast_02;
/* -
需求:
-
把字符串中的字符进行排序。
举例:”dacgebf”
结果:”abcdefg” -
*/
public class ArrayTest {
public static void main(String[] args) {//定义一个字符串 String s = "dacgebf"; System.out.println("排序前:"+s); // 将字符串转成字符数组 char [] chs = s.toCharArray(); // 调用方法,进行冒泡排序 String s1 = MaoPao(chs); System.out.println("排序后:"+s1);
}
public static String MaoPao(char [] chs){
for(int x=0;x<chs.length-1;x++){
for(int y=0;y<chs.length-1-x;y++){
if(chs[y]>chs[y+1]){
char temp = chs[y];
chs[y]=chs[y+1];
chs[y+1]=temp;
}
}} String s = String.valueOf(chs); return s;
}
}
-----------------------------知识点20 总结-------------------------------------
package cn.itcast_03;
/* -
基本查找 数组元素无序(从头大小)
二分查找 数组元素有序(折半查找) -
分析:
-
A:定义最大索引,最小索引
-
B:计算出中间索引
-
C:拿中间索引的值和要查找的值进行比较
-
相等:就返回当前的中间索引
-
不相等:
-
大 左边找
-
小 右边找
-
D:重新计算出中间索引
-
大 左边找
-
max = mid - 1;
-
小 右边找
-
min = mid + 1;
-
E:回到B
-
*/
public class ArrayDemo {
public static void main(String[] args) {
// 定义一个数组
int [] arr = {11,22,33,44,55,66};// 写功能实现 System.out.println(getIndex(arr,612));
}
public static int getIndex(int [] arr,int value){// 定义最大和最小索引 int maxIndex = arr.length-1; int minIndex = 0; //计算中间索引 int midIndex = (arr.length-1)/2; while(arr[midIndex]!=value){ if(arr[midIndex]>value){ maxIndex = midIndex-1; } if(arr[midIndex]<value){ minIndex = midIndex+1; } if(minIndex>maxIndex){ return -1; } //计算中间索引 midIndex = (minIndex+maxIndex)/2; } return midIndex;
}
}
package cn.itcast_04;
import java.util.Arrays;
/*
-
Arrays:针对数组操作的工具类。
-
1.public static String toString(int[] a) 把数组转换成字符串
2.public static void sort(int[] a) 对数组进行升序排序
3.public static int binarySearch(int[] a,int key) 二分查找 -
*/
public class ArraysDemo {
public static void main(String[] args) {
// 定义一个数组
int arr [] = {11,22,4,3,55,88,23,34,21};// 1.public static String toString(int[] a) 把数组转换成字符串 String s = Arrays.toString(arr); System.out.println("排序前:"+s); // 2.public static void sort(int[] a) 对数组进行升序排序 System.out.println("按升序排序后:"); Arrays.sort(arr); System.out.println(Arrays.toString(arr)); // 3.public static int binarySearch(int[] a,int key) 二分查找 System.out.println(Arrays.binarySearch(arr, 342));
}
}
package cn.itcast_01;
/*
-
Character 类在对象中包装一个基本类型 char 的值
此外,该类提供了几种方法,以确定字符的类别(小写字母,数字,等等),并将字符从大写转换成小写,反之亦然 -
*/
public class CharacterDemo {
public static void main(String[] args) {
// 创建对象
Character ch = new Character(‘a’);
System.out.println(“ch:”+ch);}
}
package cn.itcast_02;
/*
-
public static boolean isUpperCase(char ch): 判断字符是否为大写
public static boolean isLowerCase(char ch): 判断字符是否为小写
public static boolean isDigit(char ch): 判断字符是否为数字
public static char toUpperCase(char ch):把字符转成大写
public static char toLowerCase(char ch):把字符转成小写 -
*/
public class CharacterDemo {
public static void main(String[] args) {
// 定义字符
char c1 = ‘a’;
char c2 = ‘A’;
System.out.println(Character.isUpperCase(c2));
System.out.println(Character.isLowerCase(c1));
System.out.println(Character.isDigit(c1));
System.out.println(Character.toUpperCase(c1));
System.out.println(Character.toLowerCase(c2));}
}
package cn.itcast_03;
import java.util.Scanner;
/*
-
统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数.(不考虑其他字符)
-
分析
-
1.定义三个统计变量
-
BigCount = 0;
-
SmallCount = 0;
-
NumberCount = 0;
-
2.键盘录入一个字符串
-
3.将字符串转化成字符数组 arr
-
4.循环遍历
-
if (Character.isUpperCase(arr[x])){
-
BigCount++;
-
}
-
if(Character.isLowerCase(arr[x])){
-
SmallCount++;
-
}
-
if(Character.isDigit(arr[x])){
-
SmallCount++;
-
}
-
*/
public class CharacterTest {
public static void main(String[] args) {
// 创建键盘录入对象
Scanner sc = new Scanner(System.in);
// 接收键盘录入数据
System.out.println(“请输入一个字符串(只能包含大小写字母和数字):”);
String s = sc.nextLine();// 调用判断方法 Find(s);
}
public static void Find(String s){
// 将字符串转化成字符数组
char [] arr = s.toCharArray();// 定义统计变量 int BigCount = 0; int SmallCount = 0; int NumberCount = 0; // 遍历数组 for (int x=0;x<arr.length;x++){ if (Character.isUpperCase(arr[x])){ BigCount++; } if(Character.isLowerCase(arr[x])){ SmallCount++; } if(Character.isDigit(arr[x])){ NumberCount++; } } System.out.println("您输入的字符串为:"+s); System.out.println("包含"+BigCount+"个大写字母"); System.out.println("包含"+SmallCount+"个小写字母"); System.out.println("包含"+NumberCount+"个数字");
}
}
1:StringBuffer(掌握)
(1)用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了
一个字符串缓冲区类。StringBuffer供我们使用。
(2)StringBuffer的构造方法
A:StringBuffer()
B:StringBuffer(int size)
C:StringBuffer(String str)
(3)StringBuffer的常见功能(自己补齐方法的声明和方法的解释)
A:添加功能
B:删除功能
C:替换功能
D:反转功能
E:截取功能(注意这个返回值)
(4)StringBuffer的练习(做一遍)
A:String和StringBuffer相互转换
String – StringBuffer
构造方法
StringBuffer – String
toString()方法
B:字符串的拼接
C:把字符串反转
D:判断一个字符串是否对称
(5)面试题
小细节:
StringBuffer:同步的,数据安全,效率低。
StringBuilder:不同步的,数据不安全,效率高。
A:String,StringBuffer,StringBuilder的区别
B:StringBuffer和数组的区别?
(6)注意的问题:
String作为形式参数,StringBuffer作为形式参数。
2:数组高级以及Arrays(掌握)
(1)排序
A:冒泡排序
相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处。同理,其他的元素就可以排好。
public static void bubbleSort(int[] arr) {
for(int x=0; x<arr.length-1; x++) {
for(int y=0; y<arr.length-1-x; y++) {
if(arr[y] > arr[y+1]) {
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
B:选择排序
把0索引的元素,和索引1以后的元素都进行比较,第一次完毕,最小值出现在了0索引。同理,其他的元素就可以排好。
public static void selectSort(int[] arr) {
for(int x=0; x<arr.length-1; x++) {
for(int y=x+1; y<arr.length; y++) {
if(arr[y] < arr[x]) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
(2)查找
A:基本查找
针对数组无序的情况
public static int getIndex(int[] arr,int value) {
int index = -1;
for(int x=0; x<arr.length; x++) {
if(arr[x] == value) {
index = x;
break;
}
}
return index;
}
B:二分查找(折半查找)
针对数组有序的情况(千万不要先排序,在查找)
public static int binarySearch(int[] arr,int value) {
int min = 0;
int max = arr.length-1;
int mid = (min+max)/2;
while(arr[mid] != value) {
if(arr[mid] > value) {
max = mid - 1;
}else if(arr[mid] < value) {
min = mid + 1;
}
if(min > max) {
return -1;
}
mid = (min+max)/2;
}
return mid;
}
(3)Arrays工具类
A:是针对数组进行操作的工具类。包括排序和查找等功能。
B:要掌握的方法(自己补齐方法)
把数组转成字符串:
排序:
二分查找:
(4)Arrays工具类的源码解析
(5)把字符串中的字符进行排序
举例:
"edacbgf"
得到结果
"abcdefg"
3:Integer(掌握)
(1)为了让基本类型的数据进行更多的操作,Java就为每种基本类型提供了对应的包装类类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
(2)Integer的构造方法
A:Integer i = new Integer(100);
B:Integer i = new Integer(“100”);
注意:这里的字符串必须是由数字字符组成
(3)String和int的相互转换
A:String – int
Integer.parseInt(“100”);
B:int – String
String.valueOf(100);
(4)其他的功能(了解)
进制转换
(5)JDK5的新特性
自动装箱 基本类型–引用类型
自动拆箱 引用类型–基本类型
把下面的这个代码理解即可:
Integer i = 100;
i += 200;
(6)面试题
-128到127之间的数据缓冲池问题
4:Character(了解)
(1)Character构造方法
Character ch = new Character(‘a’);
(2)要掌握的方法:(自己补齐)
A:判断给定的字符是否是大写
B:判断给定的字符是否是小写
C:判断给定的字符是否是数字字符
D:把给定的字符转成大写
E:把给定的字符转成小写
(3)案例:
统计字符串中大写,小写及数字字符出现的次数