内容提前看
- String类中的split特殊字符大坑
- 逻辑运算符,移位
- 三目运算
- InteliJ IDEA快捷键
一、String中的大坑:split与正则的特殊符号转义
扩展:注意所有存在匹配的地方都要转义正则特殊符
- 如果字符串中用"."或"|"作为分隔,必须进行转义,如:String.split("\.")或String.split("\|");,这样才可以正确的分开,如果用String.split(".")是取不到任何数据的;* \是正则表达式的一个转义 *
- 如果在一个字符串中有多个分隔符,可以用“|”作为连字符,如:"a = 1 and b = 2 or c=3", 做法String.split("and|or");
String str = "abc.124";
String[] strs = str.split("\\.");
System.out.println(strs[0] + "\t" + strs[1]);
str = "693483738|直角杯350ml|19.8";
String[] goodsInfo = str.split("\\|");
System.out.print("条码:" + goodsInfo[0] + "\t,品名:" + goodsInfo[1] + "\t,单价:" + goodsInfo[2]);
str = "693483738,直角杯350ml:19.8";
String[] goodsInfo2 = str.split(",|:");
System.out.print("\n条码:" + goodsInfo2[0] + "\t,品名:" + goodsInfo2[1] + "\t,单价:" + goodsInfo2[2]);
执行:
abc 124
条码:693483738 ,品名:直角杯350ml ,单价:19.8
条码:693483738 ,品名:直角杯350ml ,单价:19.8
二、异或运算--注意规则 :左右相同则为false,左右不同则为true
^ : 当符号左右都为一样时,则为false, 如果左右两边不一样时,则为true
true ^ true: false;
true^false: true;
false^true:true;
false^false:false;
异或的应用:交换两个值
// 交换 a ^= b; b ^= a; a ^= b;
原理: a=ab:10011011=0010
b=ba:10110010=1001
a=ab:00101001=1011
非布尔型参与的逻辑运算符
当符号左右不是布尔型时,系统会将非布尔值转为二进制后再按位运算。
&运算:
0000 1010 10
0000 1000 8
0000 1000:结果:8
|运算:
0000 1010 10
0000 1000 8
0000 1010:结果:10
^运算:
0000 1010 10
0000 1000 8
0000 0010:结果:2
注意:此运算当遇到较大的数值时会出错
双与、双或逻辑运算符:&&, || 带短路的运算
移位运算
左移:相当*2 <<
右移:相当于除以2
针对二进制位进行操作的运算符:(连接整数)
<< : 左移: 空位补0,高位丢弃
>> 右移: 空位补最高位.
>>> : 无符号右移 空位都补0
左移几位相当于乘以2的几次方
右移几位相当于除以2的几次方
7<<2 28
7: 00000000 00000000 00000000 00000111
<<2 00000000 00000000 00000000 00011100 28
15 >>2 3
15: 00000000 00000000 00000000 00001111
>>2 00000000 00000000 00000000 00000011 3
练习:
14 <<3 112 14*8
13>>4 0
int a = +3;
int b = 3+4;
三、InteliJ IDEA快捷键
- 删除一行:ctrl+X(删除选定的内容) ctrl+Y
- 复制一行:ctrl+D
- 上插一行:ctrl+alt+回车
- 下插一行:ctrl+shift+回车
- 注释单行:ctrl+/
- 复制上一个使用的类:alt+/
- 格式化代码:ctrl+alt+L
- 上移下移:alt+shift+上下方向键
- 快速查询:shift
- 简写:psvm->入口方法 sout
- 加断点:ctrl+f8
- 调试:shift+f9
- 步入:F7
- 步过:F8
- 步出:shift + F8
- 运行到光标处:alt+F9
- 运行:ctrl+shift+f10
- 快捷代码:
- 判断空或非空:变量名.null 非空:变量名.notnull 或.nn
- var声明:new 类名.var
- try:需要语句尾.try
- for: 变量后.for|fori
- 类型强转:变量.cast
- if语句:逻辑表达式.if
- return:返回变量.return
四、练习三目运算
统计字符出现次数
public class CharacterCountDemo {
/**
* 统计大写,小写,数字出现的次数
*
* @param args
*/
public static void main(String[] args) {
String str = "IEWUReiur87743";
//char[] chs = str.toCharArray();
byte upCnt = 0;
byte lowerCnt = 0;
byte digtCnt = 0;
for (int i = 0; i < str.length(); i++) {
//大写:65-90 小写:97-122 数字:0-9
char c = str.charAt(i);
byte result = (c >= 65 && c <= 90) ? upCnt++ : (c >= 97 && c <= 122)
? lowerCnt++ : (c >= '0' && c <= '9') ? digtCnt++ : 0;
//if (result == 0) System.out.println("未找到任何大写小写以及数字。");
}
System.out.println("原字符串是:" + str);
System.out.println("其中大写字母有:" + upCnt + "个,小写字母有:" + lowerCnt + "个,数字有:" + digtCnt +"个");
}
}
结果:
原字符串是:IEWUReiur87743
其中大写字母有:5个,小写字母有:4个,数字有:0个
补充:Scanner的小bug
当nextLine放在next后使用时,还没有输入就自动路过
原因解析
当将nextLine放在next后面使用时,由于前面的next结束输入的Enter,此时nextLine会误将之前的next结束作为它的输入,自动完成。
**解决方案:**
加一个空的nextLine空接收一下上次的Enter键就可以了。
网友评论