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 }

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IE6双倍边距

2019独角兽企业重金招聘Python工程师标准>>> 前言&#xff1a;IE6双倍边距这个问题其实早在学习CSS之初都已经知道如何解决&#xff0c;但当时只知道如何解决而并不知道引起这个BUG的原因是什么&#xff0c;再接下来工 作过程中不断实践也终于明白是怎么回事了。但最…

centOs 7.2*64 ECS nginx安装教程

在服务器新建个文件夹放nginx下载包 mkdir ./nginx cd ./nginx 跳转到nginx文件下载 wget http://nginx.org/download/nginx-1.13.0.tar.gz 解压 tar -xvf ./(nginx的文件名) 进到解压文件&#xff0c;运行 ./configure --prefix/usr/local/nginx --with-http_ssl_module…

typeid详解

From: http://www.cppblog.com/smagle/archive/2010/05/14/115286.aspx 在揭开typeid神秘面纱之前&#xff0c;我们先来了解一下 RTTI &#xff08;Run-Time Type Identification&#xff0c;运行时类型识别&#xff09;&#xff0c;它使程序能够获取由基指针或引用所指向的对…

H5静态页面跳转微信小程序;从外部浏览器,点击H5链接跳转打开微信小程序;以及在微信内直接点击H5链接打开微信小程序;

参考链接 需求&#xff1a;从外部浏览器&#xff0c;点击H5链接跳转打开微信小程序&#xff1b;以及在微信内直接点击H5链接打开微信小程序&#xff1b; 步骤1&#xff1a; 小程序开发需要使用云开发创建项目&#xff0c;使用云开发生成的项目会自带云函数文件夹&#xff1b;…

构建之法阅读笔记02

构建之法第三章讲述的是如何去评价一位软件工程师。首先&#xff0c;类似于艺术创作&#xff0c;一件好的作品一定是经过一位好的艺术家倾注自己的灵感和情感所创作出来的。同样的&#xff0c;一个好的软件也需要一位好的软件工程师倾注他的智慧和汗水才能得以诞生。首先作为初…

c简单的链表错误及改正

2019独角兽企业重金招聘Python工程师标准>>> 以下代码运行时崩溃&#xff1a; #include <iostream> using namespace std; struct node { int num; struct node * next; }; node * creat() { node * headNULL;node*HEADhead; cout<<"输入数字&…

js数组去重方法

var arrayList [];arrayList arrayList.filter(function (element, index, self) {return self.indexOf(element) index; });

uni-app微信小程序跳转公众号;微信小程序打开公众号;微信小程序识别二维码添加好友;微信小程序通过公众号添加好友;小程序里识别企业微信二维码点击联系人名片无反应?

需求&#xff1a; 在微信小程序页面中&#xff0c;长按识别图片二维码&#xff0c;识别出联系人后&#xff0c;点击添加好友&#xff1b; 问题&#xff1a;微信官方社区说是小程序添加不了好友&#xff1b; 解决方案&#xff1a; 目前只能通过微信小程序跳转至公众号&#xf…

A*算法入门

From: http://www.cppblog.com/mythit/archive/2009/04/19/80492.aspx 在看下面这篇文章之前&#xff0c;先介绍几个理论知识&#xff0c;有助于理解A*算法。 启发式搜索&#xff1a;启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估&#xff0c;得到最好的位置&a…

ThinkPHP讲解(一)框架基础

ThinkPHP框架知识点过于杂乱&#xff0c;接下来将以问题的形势讲解tp&#xff08;ThinkPHP的简写&#xff09; 1.tp框架是什么&#xff0c;为什么使用是它&#xff1f; 一堆代码的集合&#xff0c;里边有变量、函数、类、常量&#xff0c;里边也有许多设计模式MVC、AR数据库、单…

Kundera 2.1 发布,NoSQL 的 ORM 框架

Kundera 2.1 发布&#xff0c;Kundera 是一个 JPA 2.0 兼容的 NoSQL 数据存储的对象映射框架。目前支持的 NoSQL 服务器包括&#xff1a;Cassandra、HBase、MongoDB。 Kundera 2.1 包含 bug fixes, 性能提升以及如下的新特性&#xff1a; CQL Version configurationBatch inser…

uni-app文档需要注意细节点

1.非H5端&#xff0c;不能使用浏览器自带对象&#xff0c;比如document、window、localstorage、cookie等&#xff0c;更不能使用jquery等依赖这些浏览器对象的框架。因为各家小程序快应用都不支持这些对象。 2.APP 和小程序的导航栏和 tabbar 均是原生控件&#xff0c;元素区…

VMware里装XP 没有找到硬盘驱动器

遇到问题&#xff1a;解决&#xff1a;要给虚拟机配上一个虚拟的硬盘驱动器。在VMWare的虚拟机配置里面给这个虚拟机增加硬盘&#xff0c;选IDE模式&#xff0c;而非SCSI&#xff0c;设定硬盘大小和文件名就可以了。转载于:https://www.cnblogs.com/haxianhe/p/9271196.html

serv-u无法自动启动:无法开始服务器!服务器执行缺少

我在服务器上安装了一个serv-u 6.3版本&#xff0c;安装的时候一切正常。安装后想设置为自动开设&#xff08;系统服务&#xff09;勾打上时候&#xff0c;开设报错。在服务里面查看&#xff0c;发现servu的服务器没有起来&#xff0c;手动启动也不行。网上查了很多方法&#x…

uni-app微信小程序登录;uni-app微信登录小程序;uni-app微信登录app;

思路&#xff1a; 通过uni-app文档可知:实现微信登录&#xff0c;无论是app还是小程序&#xff0c;都需要唯一标识openid&#xff0c;然后通过openid取掉后端的登录接口&#xff0c;获取cookie然后做登录跳转&#xff1b; 【-【-【必须先调用微信的登录接口uni.login&#xff0…

线性表 - 数据结构和算法06

线性表 让编程改变世界 Change the world by program 感受线性表的存在 各位鱼油大家好&#xff0c;从今天开始小甲鱼带大家开始学习第一个数据结构&#xff1a;线性表 先让我我们通过图片来感受一下&#xff0c;线性表的特性吧。 [caption id"attachment_758" a…

mariadb允许远程访问权限

允许远程访问权限&#xff1a; GRANT ALL PRIVILEGES ON *.* TO root%IDENTIFIED BY 你的密码 WITH GRANT OPTION;

关于_WIN32_WINNT的含义

From: http://blog.csdn.net/gzzheyi/article/details/7190143 在使用一些新版本的API&#xff0c;或者控件的新特性&#xff08;比如新版的ComCtl32.dll&#xff09;的时候,你可能会得到“error C2065: undeclared identifier.“这个错误。原因是这些功能是依赖于你的操作系统…

linux 下oracle基于raw扩充表空间步骤

数据中基于RAW格式的表空间扩容。以下是详细步骤&#xff1a;查看已有裸设备<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />#cd /dev/raw#ls -rtl查看之前裸设备大小情况/查看之前lv大小#blockdev --getsize /dev/raw/raw37204…

uni-app微信小程序获取手机号;微信小程序获取手机号,获取到后需要进行解密;微信小程序获取手机号失败 Error:该appId没有权限

方法1.uni-app登录加获取手机号解密—直接看此篇即可解决 微信小程序获取手机号注意点&#xff1a; 1.需要先登录&#xff0c;微信小程序登录看这篇 2.手机号获取到时加密的&#xff0c;需要后端解密或者前端自己解密&#xff08;解密时候就会用到登录得到的session_key&#…