1.概述
流程控制在任何编程语言中都是基础中的基础,再复杂的程序与算法都是由这些流程控制语言组合起来的。
2.流程控制方法
Java流程控制包括顺序控制、条件控制和循环控制。
最常见的控制方法就是顺序控制。顺序控制,就是从头到尾依次执行每条语句操作,没有任何的约束。
条件控制,顾名思义,就是基于条件选择执行语句,比方说,如果条件成立,则执行操作A,或者如果条件成立,则执行操作A,反之则执行操作B。条件之间相互独立时,还可以表达为a条件满足时执行操作A,b条件满足时执行条件B,c条件满足时执行操作C……
循环控制,又称为回路控制,根据循环初始条件和终结要求,执行循环体内的操作。
下面重点介绍条件控制和循环控制的语法。
3.语法
3.1判断语句
要约束条件控制和循环控制,必须要有一定的约束条件。所谓约束条件,从根本上看就是一个布尔值(true/false)。最常见的返回布尔值的是判断语句。一般的判断符号有:>、>=、<、<=、==、!=(~=)。
一个判断语句返回一个布尔值,如果每个条件之间有约束的话,那么这一个条件语句往往会包含多条条件语句。因此为了清晰表达多条与句之间的关系,我们需要关系符。常见的关系符有:与(&和&&),或(|和||),非(!和~)。
① &和&&
这两个都表示与的关系,所判断得到的结果是一样的,如下表所示(A&B)
| true | false |
ture | ture | false |
false | false | false |
当且仅当A和B均为真时,得到的结果才为真;否则得到的结果为假。
&和&&得到的结果虽然一致,但是他们处理的过程是不一致的。A&B处理时,会首先判断A和B的真假性,带入上面的表格中得到相应的结果;而A&&B处理时,会先判断A的真假性,如果A为真则会再去判断B的真假性,带入上面的表格中得到结果。而如果A为假,那么不管B是否为真,结果都是假,所以不会去判断B的真假性而直接输出结果。因此&&又被称为短路与。
② |和||
这两个都表示或的关系,所判断得到的结果是一样的,如下表所示(A|B)
| true | false |
ture | ture | ture |
false | ture | false |
当且仅当A和B均为假时,得到的结果才为假;否则得到的结果为真。
|和||的关系和&与&&的关系一致,||又称短路或,A||B会优先判断A,如果A为假才会继续判断B,否则直接输出结果为真。
③ ~和!
这两个之间完全没有区别,都是表示非的意思,即将判断结果取反。
3.2条件控制
①.if条件语句:关键词if
if条件语句语法格式:
if(条件A){
执行语句A;
}else if(条件B){
执行语句B;
}else{
执行语句C;
}
②.switch条件语句:关键词switch
switch条件语句语法格式:
switch(变量A){
case 值a:
执行语句A;
break;
case 值b:
执行语句B;
break;
case 值c:
执行语句C;
break;
default:
执行语句D;
(break;)
}
值得一提的是,switch-case语句中必须要有break,我们可以把switch语句想象成一条长廊,长廊左面一侧全是入口(case语句),右面一侧全是出口(break语句),一个入口对应一个出口,中间的过道是执行语句。正常人会从一个入口进,经过过道到另一个出口出。如果没有出口(break语句),那么这个人要出去,就会进入下一个过道,如果下一个过道仍然没有出口,则会进入再下一个,直到找到出口出去为止。那么在这个过程中,系统就会执行别的条件语句,就不符合switch语句的功能了。有兴趣的话可以试一试不加break语句,看看结果如何。
3.3循环控制
①.for循环语句:关键词for
for循环语句语法格式:
for(变量初始值;约束条件;循环结束后执行语句){
执行语句;
}
语句中一共有三个参数语句,每条语句之间用分号隔开。当约束条件满足时执行语句,不满足时跳出循环,执行后面的语句。
②.while循环语句:关键词while
while循环语句语法格式:
while(条件A){
执行语句A;
}
程序刚运行到这条语句时会先判断条件A,结果为true时执行语句A,每次执行完后都会判断条件A,直到条件A不满足时跳出循环,执行后面的语句。
③.do-while循环语句:关键词do、while
do-while循环语句语法格式:
do{
执行语句B;
}while(条件B);
程序刚运行到这条语句时会先执行语句A,每次执行完后都会判断条件A,直到条件A不满足时跳出循环,执行后面的语句。
4.字符串处理
String类适用于描述字符串事物,它也提供了多个方法对字符串进行操作。
常用的方法如下:
(以下方法以字符串StringA = “abcdefgabcdefg”为例)
4.1 获取:
4.1.1字符串中包含的字符数,也就是字符串的长度。
intlength():获取长度。
如:A.length()得到的值为14。
4.1.2根据位置获取该位置上的某个字符。
charcharAt(int index):返回指定索引处的char值。(index从0开始)
如:A.charAt(3)得到的字符为d。
4.1.3根据字符获取该字符在字符串的位置。
intindexOf(String str):返回的是str在字符串中第一次出现的位置。
intindexOf(char ch,int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位置。
intlastIndexOf(int ch):反向索引一个字符出现的位置
注意:str、ch都可以是String、char,当为String时,返回的是String中第一个字符的位置。如果返回-1表示该str 不在字符串中存在。
如:A.indexOf(‘a’)得到的值为0;
A.indexOf(“abc”,1)得到的值为7;
A.lastIndexOf(‘a’)得到的值为7。
4.2 判断:
4.2.1字符串中是否包含某一个子串。
booleancontains(str);
如:A.contains(‘x’)得到的是false;
该语句还可表达为A.indexOf(‘x’)!=-1
4.2.2字符中是否有内容。
booleanisEmpty():原理就是判断长度是否为0.
4.2.3字符串是否是以指定内容开头。
booleanstartsWith(str);
如:A.startsWith(“ab”)得到的是true。
4.2.4字符串是否是以指定内容结尾。
booleanendsWith(str);
4.2.5判断字符串内容是否相同。重写Object类中的equals方法。
booleanequals(str);
如:A.equals(“ABCDEFabcdef”)得到的是false。
4.2.6判断内容是否相同,并忽略大小写
booleanequalsIgnoreCase();
如:A. equalsIgnoreCase(“ABCDEFabcdef”)得到的是true。
4.3 转换
4.3.1将字符数组转换成字符串。
构造函数:
String(char[]):将字符数组按顺序组合成字符串
String(char[],offset,count):将字符数组中以第offset个字符为始,取count个字符转换成字符串。
静态方法:
staticString copyValueOf(char[]);
staticString copyvalueOf(char[] data, int offset, int count);
与构造函数类似,这两个方法是将字符数组转换成字符串并输出。
4.3.2将字符串转换成字符数组(重点)。
char[]toCharArray();
4.3.3将字节数组转换成字符串。
String(byte[])
String(byte[],offset,count):将字节数组中的一部分转换成字符串。
4.3.4将字符串转换成字节数组
byte[] getBytes();
4.3.5将基本数据类型转换成字符串。
StringvalueOf(int);
StringvalueOf(double);
4.4 替换
Stringreplace(oldchar,newchar);
如:A.repalce(‘a’,’A’)得到的字符串为”AbcdefAbcdef”
4.5 切割
String[]split(regex);
除了特殊字符(* ^ : | . \),其余的字符直接输入,可以将字符串根据这些字符分割成多条字符串,多个字符可以用|分 隔。
如:
Stringaddress1=”江苏省,淮安市,清河区”;
Stringaddress2=”江苏省\淮安市\清河区”;
Stringaddress3=”江苏省|淮安市|清河区”;
Stringaddress4=”江苏省:淮安市:清河区”;
Stringaddress5=”江苏省^淮安市^清河区”;
Stringaddress6=”江苏省*淮安市*清河区”;
Stringaddress7=”江苏省.淮安市.清河区”;
Stringaddress8=”江苏省^淮安市@清河区”;
String[]Address1=address1. Split(“,”);
String[]Address2=address2. Split(“\\”);
String[]Address3=address3. Split(“\\|”);
String[]Address4=address4. Split(“\\:”);
String[]Address5=address5. Split(“\\^”);
String[]Address6=address6. Split(“\\*”);
String[]Address7=address7. Split(“\\.”);
String[]Address8=address8. Split(“\\^|@”);
以上字符创数组的内容完全一致:
Address1[0]=”江苏省”;
Address1[1]=”淮安市”;
Address1[2]=”淮阴区”;
4.6 子串
获取字符串中的一部分
Stringsubstring(begin);
Stringsubstring(begin,end);
如:A.substring(10)得到的字符串为”defg”
A.substring(8,10) 得到的字符串为”bcd”
4.7 转换,去除空格,比较
4.7.1将字符串转成大写或者小写。
String toUpperCase();
String toLowerCase();
4.7.2将字符串两端的多个空格去除。
String trim();
以上,便是我对流程控制与字符串处理相关知识与概念的理解和概括。欢迎大家在评论里讨论!