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 }

转载于:https://www.cnblogs.com/sunshine-habit/p/5581648.html

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

  1. python目录和文件的基本操作_python学习笔记(七)——文件和目录操作

    目录和文件操作 语言只有和外部连起来操作才会实现更强大的功能,比如操作文件.数据库等,这样数据可以有一块单独存储的地方,而不是存放在内存中.更强大的是网络编程,当然这些后续都会学习.接下来学习pyth ...

  2. Python中字符串格式化输出的学习笔记

    1 前言 此笔记讲述了如何对字符串进行格式化输出- 2 改变print()输出的颜色 这里我们可以通过字符串命令来改变**print()**输出的颜色: 例如下面的代码: def warning(*a ...

  3. python字符是什么意思_字符串是什么—Python学习笔记

    Python 中有六种标准数据类型:String(字符串) Number(数字) List(列表) Tuple(元组) Sets(集合) Dictionary(字典) 今天讲一下字符串. 字符串是什么 ...

  4. mysql添加字符串日期时间_mysql学习笔记--- 字符串函数、日期时间函数

    一.常见字符串函数:1.CHAR_LENGTH  获取长度(字符为单位) 2.FORMAT  格式化 3.INSERT  替换的方式插入 4.INSTR  获取位置 5.LEFT/RIGHT  取左. ...

  5. MySQL按字符串hash分区_MySQL学习笔记(14):分区

    本文更新于2019-06-30,使用MySQL 5.7,操作系统为Deepin 15.4. 分区类型 可以使用SHOW PLUGINS查看是否安装了分区插件. MySQL创建分区表支持使用大部分存储引 ...

  6. java 字符串常用函数_Java学习笔记35:Java常用字符串操作函数

    package com.xxx.controller.api; import org.apache.commons.lang.StringUtils; public class Test { publ ...

  7. 【python操作excel数据有效性(含excel的基本操作)】学习笔记

    Excel的数据有效性功能,可以对输入单元格的数据进行内容上的限制.当我们利用 excel 生成代码时,可以通过此类方式规范输入. 以下是:[openpyxl官方文档] excel的基本操作 生成xl ...

  8. python里数字怎么表示_Python 中的数字—Python 学习笔记

    今天讲一下 Python 中六种标准数据类型之一:数字. 整数 整数可以执行加减乘除运算,+代表加法, -代表剪法, *代表乘法./代表除法, %代表求余数: >>> 1+2 3 & ...

  9. java和noddjs哪个好,【RequireJS--API学习笔记】

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

最新文章

  1. Spring 系列,第 2 部分: 当 Hibernate 遇上 Spring
  2. 1.7. FreeBSD 初始化设置
  3. 多核 CPU 和多个 CPU 有何区别
  4. Python的setuptools详解【1】
  5. 收藏/一文弄清楚强弱电机房位置大小及布置如何选择?
  6. linux下载文件一直超时,Linux下connect超时处理(总结)
  7. python 可执行文件_如何通过Python函数运行的可执行文件的终端...
  8. Windows Git客户端搭建
  9. mac11.14 mysql_mysql 5.7 11 章 数据类型(1)
  10. lnmp环境配置laravel项目白屏问题
  11. 项目管理学习笔记二:信息系统服务管理
  12. java IDEA设置程序启动命令
  13. 桌游跑团用roll点器,可以自己设置色字的数量和种类
  14. js读取本地excel到html,JS读取本地EXCEL文件
  15. [转载] 厘米转像素
  16. js异步和同步的区别
  17. 计算机控制系统z变换公式,计算机控制系统03 Z变换.ppt
  18. 【计组】主存储器有关知识梳理
  19. k8s 1.20,IPv4/IPv6 双协议栈
  20. 用python做一个上位机串口通信_【教程】简易Python上位机之LED控制

热门文章

  1. (转)ASP.NET MVC3默认提供了11种ActionResult的实现
  2. remoteing2
  3. 机器学习理论梳理2 : KNN K近邻分类模型
  4. 符号 RUNOOB python练习题 51
  5. 如何查看linux中文件打开情况
  6. 实现离线加域---Windows2008 R2 新功能系列之八
  7. Java获取当前日期的前一个月,前一天的时间
  8. nodejs解析apk
  9. HDU 2376 Average distance
  10. 如何在eclipse中装myeclipse的插件