第八章 字符串
1,带参数的方法
(1)传值调用:基本类型(int,float,char,double,boolean,long,short...String)的参数都会采用该方式传参
(2)传址调用: 引用类型(数组,对象,除String)的参数都会采用该方式传参。
2, 练习:编写方法实现如下功能
(1)求年龄最大的学生
(2)对所有学生按年龄从大到小排序
public class Student{
String name;
int age;
public String toString(){
return name;
}
}
import java.util.*;
public class Demo2{
public Student getMaxStu(Student[]stus){
Student stu=null;
for(int i=0;i<stus.length;i++){
if(stu.age<stus[i].age){
stu=stus[i];
}
}
return stu;
}
public void orderStu(Student[] stus){
Student temp=null;
for(int i=0;i<stus.length;i++){
for(int j=0;j<stus.length-i-1;j++){
if(stus[i].age<stus[i+1].age){
temp=stus[i];
stus[i]=stus[i+1];
stus[i+1]=temp;
}
}
}
}
public static void main(String[]args){
Student[] stus=new Student[3];
Student s1=new Student();
s1.name="张三";
s1.age=23;
stus[0]=s1;
Student s2=new Student();
s2.name="李四";
s2.age=128;
stus[1]=s2;
Student s3=new Student();
s3.name="王五";
s3.age=53;
stus[2]=s3;
Demo2 d=new Demo2();
Student s=d.getMaxStu(stus);
System.out.println("年龄最大的是:"+s.name);
System.out.println("----------------------------------");
d.orderStu(stus);
System.out.println(Arrays.toString(stus));
}
}
API=APplication Interface
API帮助文档
1,在java中位于java.lang.*中的类都不用import
2,一个类中的方法,如果方法前使用static修饰,则该方法可以通过类名来直接调用
public class A{
public static void aa(){...}
public void bb(){...}
}
aa()方法的调用方式:
A.aa();
A a=new A();
a.aa();
bb()方法的调用方式:
A a=new A();
a.bb();
3,String类
(1)创建对象
String s="字符串";//先检查有没有相同的字符串,如果没有,则分配空间(共享的),有则指向对应空间。
String s=new String("字符串"); //就一定会分配新空间,而且新空间是独立的空间。
两张字符串的比较方式:
a,== 比较的是对象在内存中的地址是否一致。
b,equals方法,比较的是字符串的内容
(2)字符串中的常用方法:
int length()方法:返回字符串的长度
boolean equals(str)方法:比较字符串的内容是否相等
忽略大小写比较两个字符串:
方式1:equalsIgnoreCase方法
方式2:结合toUpperCase()或toLowerCase()
字符串连接:
+符号:+碰到字符串才是连接符
String concat(String);
字符串提取:
int indexOf(char/String)
String substring(begin,[end]); 包前不包后
去除字符串前后空格:String trim();
字符串分割方法:String[] split("分隔符");
"a,b,c,d"------>split(",")---------->{"a","b","c","d"}
(3)输入一个字符串,检查是否是合法的java文件名
a,以.java结尾
b,由数字、字母、_和$组成,并且不能以数字开头
boolean flag=false;
for(int i=0;i<str.length();i++){
char c=str.charAt(i);
if(c<'0'&&c>'9'){
flag=true;
break;
}
}
c,首字母大写(首字母不能使用$和_)
d,不能使关键字:{"Date","String","Arrays","System",...}
My.java
public boolean checkFile(String fileName){
}
代码:https://blog.csdn.net/tht990126/article/details/83993095
4,StringBuffer
(1)创建对象方式:
StringBuffer s=new StringBuffer();
StringBuffer s=new StringBuffer("字符串");
(2)常用方法
append("字符串"):追加字符串,拼接字符串。
toString():将StringBuffer转换成String
(3)使用场合
String的不变性:一旦我定义了一个字符串,那么它的内容将无法改变。
改变String的内容,就会分配新的空间来存储。
StringBuffer:改变内容不会新分配空间,提高了程序的效率
5,字符串练习:
(1)输入一个日期(yyyy/mm/dd 或 yyyy-mm-dd),截取年、月、日。
public MyDate get(String date){
String year="2012";
int a=Integer.parseInt(year);
if(){
MyDate md=new MyDate();
md.year=?;
md.month=?;
md.day=?;
return md;
}else{
return null;
}
}
class MyDate{
int year;//1980~2099
int month;//1~12
int day;//1~31
}
(2)编写程序实现:输入一篇文章,统计该文章中“中国”的出现次数
public int count(String article){
}
(3)实现用户注册的验证:用户名、密码、确认密码、身份证、手机号和座机号
a,用户名只能由数字和字母组成,并且长度必须在3~12之间。
b,密码长度必须大于6位,并且密码和确认密码必须一致。
c,身份证号必须是15位或18位,18位身份证号允许最后一位为大写字母X
d,手机号必须是11位数组,并且以1开头。
e,座机号区号由3位数字组成,电话号码为8位数字。029-88888888
public String check(String name,String password,String repassword,String id,String phone,String telphone){
return "错误消息"/"注册成功";
}
面向对象
第一章 面向对象编程:封装、继承和多态
1,面向对象------封装(3W1H)
(1)为什么要使用封装?
为了不让外界随意修改或访问该类的属性,对属性进行私有化(private),从而隐藏细节。
(2)封装的实现方式:
私有的属性+公共get/set方法
getXxx()/setXxx();
private String name;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
(3)封装的好处:增加了数据访问的限制,增强了程序的可维护性和灵活性。
2,构造方法
(1)构造方法的规则:
public 类名([参数]){
//给属性赋值
}
public B(){
}
(2)构造方法的意义:
a,构造方法是用于创建对象的,使用new关键字来进行调用。
b,作用:初始化工作
(3)默认构造方法:任何类都会有一个默认的无参构造方法
注意:一旦自己定义了构造方法,则默认的无参构造方法就不会产生了。
练习:
public class Book{
private String title;
private Stirng author;
private int pageNum;
public Book(){ //水浒
}
public Book(String title){//西游记
this.title=title;
author="吴承恩";
pageNum=340;
}
public Book(String title,String author){ //红楼梦
this.title=title;
this.author=author;
this.pageNum=346;
}
public Book(String title,String author,int pageNum){ //三国演义
this.title=title;
if(pageNum)
this.pageNum=pageNum;
}
setter/getter...
public void setPageNum(int pageNum){
if(pageNum)
}
}
public class Book{
private String title;
private String author;
private int pageNum;
public Book(){
}
public Book(String title){
this.title=title;
this.author="吴承恩";
this.pageNum=600;
}
public Book(String title,String author){
this.title=title;
this.author=author;
this.pageNum=500;
}
public Book(String title,String author,int pageNum){
this.title=title;
this.author=author;
if(pageNum>200){
this.pageNum=pageNum;
}else{
this.pageNum=200;
}
}
public String getTitle(){
return title;
}
public void setTitle(String title){
this.title=title;
}
public String getAuthor(){
return author;
}
public void setAuthor(String author){
this.author=author;
}
public int getPageNum(){
return pageNum;
}
public void setPageNum(int pageNum){
if(pageNum>200){
this.pageNum=pageNum;
}else{
this.pageNum=200;
}
}
public String toString(){
return "《"+title+"》的作者是"+author+",页数为"+pageNum;
}
}
class TestBook{
public static void main(String[]args){
Book shz=new Book();
shz.setTitle("水浒传");
shz.setAuthor("施耐庵");
shz.setPageNum(120);
System.out.println(shz);
Book xyj=new Book("西游记");
System.out.println(xyj);
Book hlm=new Book("红楼梦","曹雪芹");
System.out.println(hlm);
Book sgyy=new Book("三国演义","罗贯中",2300);
System.out.println(sgyy);
}
}