No1_6.字符串的基本操作2_Java学习笔记

  1 import java.util.Scanner;
  2 import java.util.regex.Pattern;
  3 
  4 public class HelloString2 {
  5 
  6     public static void main(String[] args) {
  7         // TODO Auto-generated method stub
  8         /*******************
  9          *一、正则表达式:对输入的数据格式进行检查
 10          *1.对输入的格式进行验证,页面上的一般用java 还是 js?
 11          *答:一般前端做做验证,后台稍作验证即可。
 12          *如果数据很关键,安全性很关键,那么后端就必须做非常完备的数据验证,而且还要采取其他一些防范措施来避免
 13          *(或者确切地说减少可能性)SQL注入、跨站脚本攻击、CSRF(跨站请求伪造)、缓冲区溢出等等攻击。
 14          *2.可以使用String类的matches()方法进行判断。boolean matches(String regex)
 15          *3.
 16          */
 17         
 18         //正则表达式中的元字符
 19                 /*
 20                  .        代表任意一个字符
 21                 \d     任何一个数字,等价于[0-9]或[0123456789]
 22                 \D     任何一个非数字,等价于[^0-9]或[^0123456789]
 23                  \w    任何一个字母(不区分大小写)、数字、下划线,等价于[0-9a-zA-Z_]
 24                  \W    任何一个非字母数字和下划线,等价于[^0-9a-zA-Z_]
 25                     \s      任何一下空白字符,等价于[\f\n\r\t\v]
 26                  \S      任何一下空白字符,等价于[^\f\n\r\t\v]
 27                 \p{Upper}          大写字母字符:[A-Z]
 28                 \p{Lower}          小写字母字符:[a-z]
 29                 \p{ASCII}           所有 ASCII:[\x00-\x7F]
 30                 \p{Alpha}          字母字符:[\p{Lower}\p{Upper}]
 31                 \p{Digit}            十进制数字:[0-9]
 32                  \p{Alnum}         字母数字字符:[\p{Alpha}\p{Digit}]                
 33                 \p{Punct}          标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
 34                 \p{Graph}          可见字符:[\p{Alnum}\p{Punct}]
 35                 \p{Print}            可打印字符:[\p{Graph}\x20]
 36                 \p{Blank}           空格或制表符:[ \t]
 37                 \p{Cntrl}            控制字符:[\x00-\x1F\x7F]
 38                 \p{Space}          空白字符:[ \t\n\x0B\f\r]
 39                 \p{XDigit}          十六进制数字:[0-9a-fA-F]
 40                  */
 41                 System.out.println("正则表达式 开始啦啦啦\n");
 42                 //例一:判断指定字符是否合法,要求字符串由7个数字组成,并且第一位必须是大写字母,2~4位是小写字母,后3位是数字,输出结果。
 43                 System.out.println("例一:判断指定字符是否合法,要求字符串由7个数字组成,并且第一位必须是大写字母,2~4位是小写字母,后3位是数字,输出结果。");
 44                 String  s1="Lyqm887";
 45                 String s2="hiGirl6";
 46                 boolean bn1=s1.matches("\\p{Upper}\\p{Lower}\\p{Lower}\\p{Lower}\\d\\d\\d");
 47                 boolean bn2=s2.matches("\\p{Upper}\\p{Lower}\\p{Lower}\\p{Lower}\\d\\d\\d");
 48                 System.out.println(s1+"是合法数据吗?"+bn1);
 49                 System.out.println(s2+"是合法数据吗?"+bn2);
 50             //正则表达式中的限定符
 51                 /*
 52                 ?     0次或1次
 53                 *         0次或多次
 54                  +       0次或多次
 55                  {n}    正好出现n次
 56                     {n,}   至少出现n次
 57                  {n,m}   出现n~m次  
 58                  */    
 59                 //例二:例一的正则表达式简化
 60                 System.out.println("\n例二:例一的正则表达式简化");
 61                 boolean bn3=s2.matches("\\p{Upper}\\p{Lower}{3}\\d{3}");
 62                 System.out.println(s1+"是合法数据吗?"+bn3);
 63                 
 64                 //例三:判断变量是否是合法的email地址
 65                 System.out.println("\n例三:判断变量是否是合法的email地址");
 66                 String s3="yjgogjge@163.com";
 67                 String s4="@163.com";
 68                 String s5="yjgogjge@.";
 69                 String regex="\\w{1,}\\@{1}\\w{0,}\\.{1}\\w{1,}";
 70                 if(s3.matches(regex)){
 71                     System.out.println(s3+"是一个合法的Email地址~");
 72                 }
 73                 if(s4.matches(regex)){
 74                     System.out.println(s4+"是一个合法的Email地址~");
 75                 }
 76                 if(s5.matches(regex)){
 77                     System.out.println(s5+"是一个合法的Email地址~");
 78                 }
 79             //方括号中元字符的含义
 80                 /*
 81                 [abc]                            a、b或者
 82                 [^abc]                        a、b、c之外的任何字符
 83                  [a-zA-Z]                    a-z或A-Z的任何字符
 84                  [a-d[m-p]]                    a-d或m-p的任何字符
 85                     [a-z&&[def]]                d、e、f
 86                  [a-z&&[^bc]]            a-z之间不包含b、c的所有字符
 87                  [a-z&&[^m-p]]            a-z之间不包含m-p的所有字符
 88                  */    
 89                 
 90                 //例四:对手机号码的合法性进行验证
 91                 System.out.println("\n例四:对手机号码的合法性进行验证");
 92                 Scanner s= new Scanner(System.in);
 93                 System.out.println("请输入手机号,验证一下你输入的是否合法?");
 94                 //String tel1=s.nextLine();
 95                 String tel1="15510168888";
 96                 System.out.println(checkTel(tel1));
 97                 
 98                 //例五:验证ip地址的合法性
 99                 System.out.println("\n例五:验证ip地址的合法性");
100                 System.out.println("请输入IP地址,验证一下是否合法?");
101                 //String ip1=s.nextLine();
102                 String ip1="1.1.1.1";
103                 System.out.println(checkIPAdress(ip1));
104                 
105                 //例六:计算文章中汉字的个数
106                 System.out.println("\n例六:计算文章中汉字的个数");
107                 String text="The secret of success is constancy to purpose.成功的秘诀在于对目标的忠实。不破不立,尝试改变一下自己~";
108                 int amount=0;
109                 
110                 for(int i=0;i<text.length();i++){
111                     //System.out.println(text.charAt(i));可以获取每个字符
112                     String chineseRegex="^[\u4e00-\u9fa5]{0,}$";
113                     boolean matches=Pattern.matches(chineseRegex, ""+text.charAt(i));    //有时间可以查一下patter类的用法
114                     if (matches){
115                         amount++;
116                     }
117                 }
118                 System.out.println(text+"\n上段话中中有几个汉字:"+amount);
119                 
120                 /********************************
121                  * 二、字符串生成器 
122                  * StringBuilder类,是字符串一个重要的常用类,且节省程序运行时间;
123                  * 初始容量是16个字符,可以自行指定初始长度
124                  * 可以动态执行添加、删除、插入字符串                
125                  * ******************************************/
126                 //例一:通过实例对比String和StringBuilder在对字符串做更新操作时所用的时间差别
127                 System.out.println("\n");
128                 System.out.println("例一:通过实例对比String和StringBuilder在对字符串做更新操作时所用的时间差别:");
129                 
130                 String str="";
131                 long startTime=System.currentTimeMillis();     //    定义执行操作的起始时间
132                 for(long m=0;m<10000;m++){
133                     str=str+m;
134                 }
135                 long endTime=System.currentTimeMillis();
136                 long time=endTime-startTime;
137                 System.out.println("String消耗时间是:"+time);
138                 
139                 
140                 StringBuilder builder=new StringBuilder("");
141                 startTime=System.currentTimeMillis();
142                 for(long n=0;n<10000;n++){
143                     builder.append(n);
144                 }
145                 endTime=System.currentTimeMillis();
146                 time=endTime-startTime;
147                 System.out.println("StringBuilder消耗时间是:"+time);
148                 
149                 //例二:将参数str指定的字符串追加到字符串生成器中,可以追加任何类型哟,包括sb类型: StringBuilder.append(String str)
150                 System.out.println("\n例二:将参数str指定的字符串追加到字符串生成器中");
151                 String myDream="可以做自己喜欢的做的事情~";
152                 boolean mySex=true;
153                 StringBuilder builder1=new StringBuilder("My dream is ");
154                 builder1.append(myDream);
155                 builder1.append(mySex);
156                 StringBuilder sb=new StringBuilder("\n不破不立~专心学习!!!");
157                 builder1.append(sb);
158                 System.out.println("追加后builder1的值是:"+builder1);
159                 
160                 //例三:将参数指定的字符串str添加到offset指定的位置 StringBuilder insert(int offset,String str)
161                 System.out.println("\n例三:将参数指定的字符串str添加到offset指定的位置");
162                 StringBuilder sb1=new StringBuilder("I  you!");
163                 sb1.insert(2, "miss");
164                 System.out.println("我又想到你了..."+sb1);
165                 
166                 //例四:移除字符串生成器中的子字符串,从指定的start处开始,到指定的end处结束;
167                 //StringBuilder.delete(int start,String end)
168                 System.out.println("\n例四:移除字符串生成器中的子字符串");
169                 StringBuilder sb2=new StringBuilder("因为喜欢,你让我想成为更好的自己!");
170                 System.out.println("原字符串是:"+sb2);
171                 sb2.delete(0, 5);
172                 System.out.println("移除字符串后是:"+sb2);
173                 
174                 //例五:将字符串生成器转换为字符串,转换后值不变 StringBuilder.toString()
175                 System.out.println("\n例六:将字符串生成器转换为字符串");
176                 StringBuilder sb3=new StringBuilder("我们总是喜欢拿“顺其自然”来敷衍人生道路上的荆棘坎坷,"
177                         + "\n却很少承认,真正的顺其自詹,其实是竭尽所能之后的不强求,而非两手一摊的不作为。 by瑞卡斯");
178                 String wordsLike=sb3.toString();
179                 System.out.println(wordsLike);
180                 
181                 //例七:将汉字和字母转换成Unicode码
182                 System.out.println("\n例七:将汉字和字母转换成Unicode码");
183                 String strUnicode="我想见你时,能不能不管你加不加班,想不想见我。。。好像不能呢~~~";
184                 char[] charArray=strUnicode.toCharArray();
185                 StringBuilder sb4=new StringBuilder();
186                 for(char c:charArray){
187                     sb4.append((int)c+" ");
188                 }
189                 System.out.println(strUnicode+"\n的Unicode码是:\n"+sb4);
190                 
191                 
192                 //范例八:去掉字符串中重复的字符
193                 System.out.println("\n范例八:去掉字符串中重复的字符");
194                 String s8="再见了,互相嫌弃的老同学,再见了,来不及说出的谢谢。";
195                 StringBuilder sb5=new StringBuilder(s8);
196                 System.out.println("原来的字符串是:"+sb5);
197                 System.out.println("原来的字符串长度是:"+sb5.length());
198                 for(int j=0;j<sb5.length();j++){
199                     for(int k=j+1;k<sb5.length();k++){
200                         if(sb5.charAt(j)==sb5.charAt(k))
201                             sb5.deleteCharAt(k);
202                     }
203                 }
204                 System.out.println("现在的字符串是:"+sb5);
205                 System.out.println("现在的字符串长度是:"+sb5.length());
206                 
207                 
208                 //经典范例九:实现字符串加密
209                 //最常用的:获取字符串的字节数组,再对字节数组中的每个字符进行操作,加密;对字符串进行相反运算,解密。
210                 System.out.println("\n经典范例九:实现字符串加密");
211                 String value="就像我说大海很漂亮,你却说淹死过很多人";
212                 char secret='晴';
213                 System.out.println("原字符串是:"+value);
214                 String encrypt=encryption(value,secret);
215                 System.out.println("加密后的字符串是:"+encrypt);
216                 String uncrypt=encryption(encrypt,secret);
217                 System.out.println("解密后的字符串是:"+uncrypt);
218                 
219                 
220                 //经典范例十:验证字符串是否是回文:即从前往后读和从后往前读一样;
221                 System.out.println("\n经典范例十:验证字符串是否是回文");
222                 //StringBuilder line=new StringBuilder("上海自来,水来自海上");
223                 String line="上海自来水来自海上";
224                 System.out.println("原始字符串是:"+line);
225                 StringBuilder line2=new StringBuilder(line);
226                 line2 =line2.reverse();//字符串生成器中字符反转,如果直接用StringBuffer类型的line转换,line和line2的存储长度是一样的。。。
227                 /****************
228                  * 备注一下原理:StringBuffer 和StringBuilder 节省内存的原理,在于拼接字符串的时候本身的对象不变,
229                  * 一直在变的是数组对象,通过不断的复制生成新的数组对象,达到拼接字符串,
230                  * 而StringBuffer和StringBuilder的代码逻辑一模一样,只是StringBuffer所有的方法都加了cynchronized,所以是线程安全的。
231                  */
232                 //line2=line2.append("喂~");
233                 System.out.println("返转后的字符串是:"+line2);
234                 int count=0;
235                 if( line.length() != line2.length()){
236                     System.out.println(line+":不是回文诗呵呵");
237                 }else{
238                     for(int y=0;y<line2.length();y++){
239                         
240                         if(line.charAt(y)==line2.charAt(y)){
241                             count++;                            
242                         }
243                         else{
244                             System.out.println(line+":不是回文诗");
245                             break;
246                         }//分支结束
247                             
248                     }//循环结束
249                                             
250                 }//外层分支结束
251             if(count==line.length()){
252                 System.out.println(line+":是回文诗~~~~");
253             }
254                 
255                 //实战开始
256                 /************************
257                  * 1.创建Number类,判断字符串""中字符'i'出现了几次,并输出结果
258                  * 2.去除字符串中的所有空格的方法,试着用for循环和if条件语句实现去除空格
259                  * 3.在项目中创建DateAndTime类,将今天的全部信息格式化后输出,再将日期以“年-月-日”的格式输出
260                  */
261             //实战一
262             System.out.println("1.创建Number类,判断字符串\"\"中字符'i'出现了几次,并输出结果");
263             
264                         
265                 
266     }
267 
268     
269             /***********************以下是函数********************************/
270             // 例四:对手机号码的合法性进行验证(前两位是13、15、18,共11位)
271             public static String checkTel(String str) {
272                 String telRegex = "1[5,3,8]\\d{9}$";
273                 if (str.matches(telRegex)) {
274                     return str + "\t是合法的手机号。";
275                 } else {
276                     return str + "\t是非法的手机号!";
277                 }
278             }
279             // 例五:验证ip地址的合法性
280             public static String checkIPAdress(String str)
281             {
282             //    String ipRegex="\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";//验证0~999之间的数字
283                 String ip = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."
284                         +"(00?\\d|1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
285                         +"(00?\\d|1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
286                         +"(00?\\d|1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";    //验证0~255之间的数字
287                 if (str.matches(ip)) {
288                     return str + "\t 是合法的ip地址。";
289                 } else {
290                     return str + "\t 是非法的ip地址!";        
291                 }
292                 
293             }
294             
295             public static String encryption(String value,char secret){
296                 byte[] bt=value.getBytes();
297                 for(int x=0;x<bt.length;x++){
298                     bt[x]=(byte)(bt[x]^(int)secret);
299                     
300                 }
301                 return  new String(bt,0,bt.length);
302             }
303 
304             
305             
306             
307 }

 

posted @ 2016-06-13 18:47  sunshine-habit  阅读(227)  评论(0编辑  收藏  举报