java基础.docx
- 文档编号:23849887
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:81
- 大小:202.53KB
java基础.docx
《java基础.docx》由会员分享,可在线阅读,更多相关《java基础.docx(81页珍藏版)》请在冰豆网上搜索。
java基础
目录
1.数的进制之间的转换2
2.打印等腰三角形3
3.获取一个随机字符4
4.运算符运用4
5、String5
6、集合9
7、时间类15
8、IO流16
9、反射26
10、网络编程(TCP/UDP)28
多线程聊天程序(基于UDP)28
TCP通信33
文件上传(基于TCP)36
实验测试浏览器与服务器之间的信息格式40
简单HTTP服务器实现41
简易网络爬虫(相当不成熟)44
1.数的进制之间的转换
/*
*二进制转化成十进制数
*/
publicintbinaryToTen(Stringbinary){
intlength=binary.length();
intresult=0;
for(inti=length-1;i>=0;i--){
if(binary.charAt(i)=='1'){
result+=myMethod(2,i);
}
}
returnresult;
}
/*
*递归方式实现十进制转二进制
*/
publicstaticvoidten2Binary(intnum){
inttemp=num%2;
if(num>0)
ten2Binary(num/2);
System.out.print(temp);
}
/*
*用移位的方式实现十进制数转换成十六进制(另外还有两种方式)
*/
publicstaticvoidten2Hex(intt){
StringBuffersb=newStringBuffer();
inttemp;
for(inti=0;i<8;i++){
temp=t&0x0000000f;
if(temp>9)
sb.append((char)(temp=temp-10+'A'));
else
sb.append(temp);
t=t>>4;
}
sb.reverse();
System.out.println(sb);
}
/*
*直接定义一个数组保存所有的十六进制数符号
*/
publicstaticvoidten2Hex2(intnum){
charcs[]=newchar[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
inttemp;
StringBuffersb=newStringBuffer();
for(inti=0;i<8;i++){
temp=num&0x0000000f;
sb.append(cs[temp]);
num=num>>4;
}
sb.reverse();
System.out.println("转换之后的数是:
"+sb);
}
/*
*使用Character.forDigit直接转换
*/
publicstaticvoidten2Hex3(intnum){
inttemp;
StringBuffersb=newStringBuffer();
for(inti=0;i<8;i++){
temp=num&0x0000000f;
sb.append(Character.forDigit(temp,16));
num=num>>4;
}
sb.reverse();
System.out.println("转换之后的结果是:
"+sb);
}
2.打印等腰三角形
/*
*打印等腰三角形
*/
publicvoidprintTrangle(inthigh){
if(high>0){
inty=high/2+1;
for(intx=0;x<=y;x++){
for(intm=0;m System.out.print(""); for(intj=0;j<2*x+1;j++) System.out.print("*"); System.out.println(); } }else { System.out.println("高度有误"); } } 编码 ASCII码表: 键盘上所有的键都在此表中对应一个字符,有一个特殊的,enter键对应两个(\r\n) 每一个字符占一个字节 gb2312码表: 英文字符占1个字节(正数),汉字占两个字节(两个都是负数) gbk码表(增容): 英文字符占1个字节(正数),汉字占两个字节(第一个为负数,第二个可正可负) Unicode码表: 国际码表,收罗了世界上大部分常用文字,每个字符占两个字节,前两个字节为特征码 utf-8码表: 国际码表,每个字符占1~3个字节,实验证明英文占1个,汉字占3个字节,前三个为特征码 publicstaticvoidcodeTest()throwsUnsupportedEncodingException{ Stringstr="abc中国"; System.out.println("原字符串: "+str); System.out.println("gbk编码: "); byte[]buf=str.getBytes(); for(inti=0;i System.out.print(buf[i]+"\t"); } System.out.println(); System.out.println("gb2312编码: "); buf=str.getBytes("gb2312"); for(inti=0;i System.out.print(buf[i]+"\t"); } System.out.println(); System.out.println("unicode"); buf=str.getBytes("unicode"); for(inti=0;i System.out.print(buf[i]+"\t"); } System.out.println(); System.out.println("utf-8: "); buf=str.getBytes("utf-8"); for(inti=0;i System.out.print(buf[i]+"\t"); } } 3.排序 插入排序 直接插入排序 希尔排序 交换排序 冒泡排序 快速排序 选择排序 直接选择排序 堆排序 归并排序 分配排序 箱排序 基数排序 1.1、直接插入排序 1.2、希尔排序 2、选择排序 /* *选择排序 *数组分为一个有序区和一个无序区,排序过程就是有序区从无到有,从小到大增加的过程 *每一次从无序区中找出一个最大数或最小数与无序区的第一个元素交换,从而将有序区增加一个 */ publicstaticvoidselectSort(int[]array){ //有序区从小到大增加,初始有序区为0 for(inti=0;i intpos=i; for(intj=i+1;j //从无序区的第二个数开始比较,找到无序区中最小数的下标 if(array[j] pos=j; } if(pos! =i) change(array,i,pos); } } 3.获取一个随机字符 /* *获取一个随机字符 */ publicstaticchargetChar(){ inta=newRandom().nextInt(32); a=a+65; return(char)a; } 4.运算符运用 /* *运用^运算符交换两个数的值,不使用第三方变量 */ publicstaticvoidexchange(intx,inty){ inta=x; intb=y; System.out.println("交换之前的数是: a="+a+",b="+b); a=a^b; b=a^b; a=a^b; System.out.println("交换之后的数是: a="+a+",b="+b); } /* *运用^运算符实现文件加密(解密程序与此道理相同,在此省略) */ publicstaticvoidaddMD(StringsoFile,StringreFile,intpassword){ Filef1=newFile(soFile); Filef2=newFile(reFile); FileInputStreamfis=null; FileOutputStreamfos=null; try{ fis=newFileInputStream(f1); fos=newFileOutputStream(f2); }catch(FileNotFoundExceptione){ System.out.println("不存在该文件"); e.printStackTrace(); } intc; intk=password; try{ System.out.println("正在加密"); while((c=fis.read())! =-1){ c=(c^k); fos.write(c); } System.out.println("加密完毕"); }catch(IOExceptione){ System.out.println("读文件时出现异常"); e.printStackTrace(); } } 5、String /* *查找子字符串在匹配字符串中存在的多个位置 */ publicint[]indexOfSubStr(Stringstr,StringsubStr){ intpos=0; StringBuildersb=newStringBuilder(); while(true){ pos=str.indexOf(subStr,pos); if(pos==-1) break; sb.append(pos+","); pos+=subStr.length(); } if(sb.length()==0) returnnull; Stringtemp=sb.toString(); String[]arrS=temp.split(","); int[]arrI=newint[arrS.length]; for(inti=0;i arrI[i]=Integer.parseInt(arrS[i]); } returnarrI; } /* *使用System.in.read()来读取用户控制台的一行数据(仅支持中文) */ publicStringreadLine()throwsIOException{ StringBuildersb=newStringBuilder(); intc; while(true){ c=System.in.read(); if(c=='\r') continue; if(c=='\n') break; sb.append((char)c); } returnsb.toString(); } /* *智能消除乱码问题 */ publicStringdecodeByGBK(byte[]bytes,intlen){ booleanb=false; for(inti=0;i if(b) b=false; elseif(bytes[i]<0) b=true; } if(b) len--; System.out.println(len); returnnewString(bytes,0,len); } /* *找出字符串中出现次数最多的字符 */ publiccharsearchMaxChar(Stringstr){ char[]buf=str.toCharArray(); intmax=0; intmaxChar=buf[0]; //1.定义外层循环,对于数组中每一个不同的字符进行统计 while(buf.length>0){ //2.定义一个char保存当前的第一个字符 charfirstChar=buf[0]; //定义一个变量来计算字符出现的次数 intcount=0; //3.通过内层循环来计算 for(inti=0;i if(buf[i]==firstChar) count++; } if(count>max){ max=count; maxChar=firstChar; } buf=delChar(buf,firstChar,count); } return(char)maxChar; } /* *找出字符串中出现次数最多的字符们 */ publicchar[]searchMaxChars(Stringstr){ Stringresult=""; intmaxCount=searchMaxCount(str); char[]buf=str.toCharArray(); for(inti=0;i intcharCount=searchMaxCount(str,buf[i]); if(charCount==maxCount){ if(result.indexOf(buf[i])==-1) result+=buf[i]; } } returnresult.toCharArray(); } /* *获取字符串中出现次数最多的字符的出现次数 */ privateintsearchMaxCount(Stringstr){ char[]buf=str.toCharArray(); intmax=0; while(buf.length>0){ charfirstChar=buf[0]; intcount=0; for(inti=0;i if(buf[i]==firstChar) count++; } if(count>max){ max=count; } buf=delChar(buf,firstChar,count); } returnmax; } /* *获取字符串中某个指定字符的出现次数 */ privateintsearchMaxCount(Stringstr,charc){ char[]buf=str.toCharArray(); intcount=0; for(inti=0;i if(buf[i]==c) count++; } returncount; } /* *从数组中删除所有指定的字符 */ privatechar[]delChar(char[]buf,charfirstChar,intcount){ char[]newChar=newchar[buf.length-count]; intpos=0; for(inti=0;i if(buf[i]! =firstChar) newChar[pos++]=buf[i]; } returnnewChar; } /* *查找两个字符串的最大子字符串(重要) */ publicStringsearchMaxSubStr(Stringstr1,Stringstr2){ StringlongStr=str1.length()>str2.length()? str1: str2; StringshortStr=str1.length()>str2.length()? str2: str2; for(inti=shortStr.length();i>0;i--){ for(intj=0;j StringsubStr=shortStr.substring(j,j+i); if(longStr.contains(subStr)) returnsubStr; } } returnnull; } 缓冲池原理: String池: 由于字符串操作很频繁,Java针对String对象提供了缓冲池 1.Strings="abc";这时首先会去池里找,如果有,直接返回引用,如果没有,会现在池中创建一个,然后返回引用 Strings1="abc"; Strings2="abc"; System.out.println(s1==s2);//结果: true 2.Strings=newString("abc"),不管池里有没有,都会在堆内存中创建一个String对象,此时负责检查并维护String池,堆内存中创建的对象为池里那个对象的一个拷贝(副本) Strings1=newString("abc"); Strings2=newString("abc"); System.out.println(s1==s2);//false 3.Java编译器有个合并已知量的功能,在编译阶段将"a"+"b"+"c"+"d"合并为"abcd" Strings1="a"+"b"+"c"+"d"; Strings2="abcd"; System.out.println(s1==s2);//true Strings1="a"; Strings2="b"; Strings3=s1+s2; System.out.println(s3=="ab");//false 4.通过方法返回的字符串,都是在堆内存中创建的对象,而且不负责检查并维护缓冲池 Stringstr="abc".toUpperCase(); System.out.println(str=="ABC");//false 6、集合 Iterator(I)Collection(I) 一、List(I) List集合元素有序,即元素按照存储是的顺序存放在数组中;允许重复的元素存在。 1、ArrayList: 数组实现,线程不安全,查找快,存储慢。 2、Vector: 数组实现,线程不安全,查找快,存储慢。 3、LinkedList: 链表实现,查找慢,存储快。 二、Set(I) Set集合元素是没有顺序的并且不允许元素重复,即在集合中存储的顺序并不是按照用户实际存储时的先后顺序。 而是按照内部机制自动排序,这中排序是用户可以控制的。 1、HashSet: 内部自动按照存储对象的hashCode来排序,并且按照对象的equals方法来确定对象元素是否是重复元素。 所以,需要存放的对象需要按照实际需要来重写hashCode方法和equals方法。 2、TreeSet: 要用TreeSet集合来存放对象,必须满足下面两个条件之一: 1)需要存储的对象实现Comparable接口(需实现CompareTo方法)。 2)在创建TreeSet的时候通过构造函数传递一个比较器,这个比较器通常使用匿名内部类的方式现象,即Comparator接口(需实现compare方法) ArrayList ArrayList arrayList.add(newStudent("arrayStudent1",23)); arrayList.add(newStudent("arrayStudent2",23)); arrayList.add(newStudent("arrayStudent3",23)); arrayList.add(newStudent("arrayStudent4",23)); arrayList.add(newStudent("arrayStudent5",23)); System.out.println("-------------------使用普通for循环来迭代------------"); for(inti=0;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 基础