import java.util.Scanner;
import java.util.regex.Pattern; public class HelloString2 { public static void main(String[] args) {
// TODO Auto-generated method stub
/*******************
*一、正则表达式:对输入的数据格式进行检查
*1.对输入的格式进行验证,页面上的一般用java 还是 js?
*答:一般前端做做验证,后台稍作验证即可。
*如果数据很关键,安全性很关键,那么后端就必须做非常完备的数据验证,而且还要采取其他一些防范措施来避免
*(或者确切地说减少可能性)SQL注入、跨站脚本攻击、CSRF(跨站请求伪造)、缓冲区溢出等等攻击。
*2.可以使用String类的matches()方法进行判断。boolean matches(String regex)
*3.
*/ //正则表达式中的元字符
/*
. 代表任意一个字符
\d 任何一个数字,等价于[0-9]或[0123456789]
\D 任何一个非数字,等价于[^0-9]或[^0123456789]
\w 任何一个字母(不区分大小写)、数字、下划线,等价于[0-9a-zA-Z_]
\W 任何一个非字母数字和下划线,等价于[^0-9a-zA-Z_]
\s 任何一下空白字符,等价于[\f\n\r\t\v]
\S 任何一下空白字符,等价于[^\f\n\r\t\v]
\p{Upper} 大写字母字符:[A-Z]
\p{Lower} 小写字母字符:[a-z]
\p{ASCII} 所有 ASCII:[\x00-\x7F]
\p{Alpha} 字母字符:[\p{Lower}\p{Upper}]
\p{Digit} 十进制数字:[0-9]
\p{Alnum} 字母数字字符:[\p{Alpha}\p{Digit}]
\p{Punct} 标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p{Graph} 可见字符:[\p{Alnum}\p{Punct}]
\p{Print} 可打印字符:[\p{Graph}\x20]
\p{Blank} 空格或制表符:[ \t]
\p{Cntrl} 控制字符:[\x00-\x1F\x7F]
\p{Space} 空白字符:[ \t\n\x0B\f\r]
\p{XDigit} 十六进制数字:[0-9a-fA-F]
*/
System.out.println("正则表达式 开始啦啦啦\n");
//例一:判断指定字符是否合法,要求字符串由7个数字组成,并且第一位必须是大写字母,2~4位是小写字母,后3位是数字,输出结果。
System.out.println("例一:判断指定字符是否合法,要求字符串由7个数字组成,并且第一位必须是大写字母,2~4位是小写字母,后3位是数字,输出结果。");
String s1="Lyqm887";
String s2="hiGirl6";
boolean bn1=s1.matches("\\p{Upper}\\p{Lower}\\p{Lower}\\p{Lower}\\d\\d\\d");
boolean bn2=s2.matches("\\p{Upper}\\p{Lower}\\p{Lower}\\p{Lower}\\d\\d\\d");
System.out.println(s1+"是合法数据吗?"+bn1);
System.out.println(s2+"是合法数据吗?"+bn2);
//正则表达式中的限定符
/*
? 0次或1次
* 0次或多次
+ 0次或多次
{n} 正好出现n次
{n,} 至少出现n次
{n,m} 出现n~m次
*/
//例二:例一的正则表达式简化
System.out.println("\n例二:例一的正则表达式简化");
boolean bn3=s2.matches("\\p{Upper}\\p{Lower}{3}\\d{3}");
System.out.println(s1+"是合法数据吗?"+bn3); //例三:判断变量是否是合法的email地址
System.out.println("\n例三:判断变量是否是合法的email地址");
String s3="yjgogjge@163.com";
String s4="@163.com";
String s5="yjgogjge@.";
String regex="\\w{1,}\\@{1}\\w{0,}\\.{1}\\w{1,}";
if(s3.matches(regex)){
System.out.println(s3+"是一个合法的Email地址~");
}
if(s4.matches(regex)){
System.out.println(s4+"是一个合法的Email地址~");
}
if(s5.matches(regex)){
System.out.println(s5+"是一个合法的Email地址~");
}
//方括号中元字符的含义
/*
[abc] a、b或者
[^abc] a、b、c之外的任何字符
[a-zA-Z] a-z或A-Z的任何字符
[a-d[m-p]] a-d或m-p的任何字符
[a-z&&[def]] d、e、f
[a-z&&[^bc]] a-z之间不包含b、c的所有字符
[a-z&&[^m-p]] a-z之间不包含m-p的所有字符
*/ //例四:对手机号码的合法性进行验证
System.out.println("\n例四:对手机号码的合法性进行验证");
Scanner s= new Scanner(System.in);
System.out.println("请输入手机号,验证一下你输入的是否合法?");
//String tel1=s.nextLine();
String tel1="15510168888";
System.out.println(checkTel(tel1)); //例五:验证ip地址的合法性
System.out.println("\n例五:验证ip地址的合法性");
System.out.println("请输入IP地址,验证一下是否合法?");
//String ip1=s.nextLine();
String ip1="1.1.1.1";
System.out.println(checkIPAdress(ip1)); //例六:计算文章中汉字的个数
System.out.println("\n例六:计算文章中汉字的个数");
String text="The secret of success is constancy to purpose.成功的秘诀在于对目标的忠实。不破不立,尝试改变一下自己~";
int amount=0; for(int i=0;i<text.length();i++){
//System.out.println(text.charAt(i));可以获取每个字符
String chineseRegex="^[\u4e00-\u9fa5]{0,}$";
boolean matches=Pattern.matches(chineseRegex, ""+text.charAt(i)); //有时间可以查一下patter类的用法
if (matches){
amount++;
}
}
System.out.println(text+"\n上段话中中有几个汉字:"+amount); /********************************
* 二、字符串生成器
* StringBuilder类,是字符串一个重要的常用类,且节省程序运行时间;
* 初始容量是16个字符,可以自行指定初始长度
* 可以动态执行添加、删除、插入字符串
* ******************************************/
//例一:通过实例对比String和StringBuilder在对字符串做更新操作时所用的时间差别
System.out.println("\n");
System.out.println("例一:通过实例对比String和StringBuilder在对字符串做更新操作时所用的时间差别:"); String str="";
long startTime=System.currentTimeMillis(); // 定义执行操作的起始时间
for(long m=0;m<10000;m++){
str=str+m;
}
long endTime=System.currentTimeMillis();
long time=endTime-startTime;
System.out.println("String消耗时间是:"+time); StringBuilder builder=new StringBuilder("");
startTime=System.currentTimeMillis();
for(long n=0;n<10000;n++){
builder.append(n);
}
endTime=System.currentTimeMillis();
time=endTime-startTime;
System.out.println("StringBuilder消耗时间是:"+time); //例二:将参数str指定的字符串追加到字符串生成器中,可以追加任何类型哟,包括sb类型: StringBuilder.append(String str)
System.out.println("\n例二:将参数str指定的字符串追加到字符串生成器中");
String myDream="可以做自己喜欢的做的事情~";
boolean mySex=true;
StringBuilder builder1=new StringBuilder("My dream is ");
builder1.append(myDream);
builder1.append(mySex);
StringBuilder sb=new StringBuilder("\n不破不立~专心学习!!!");
builder1.append(sb);
System.out.println("追加后builder1的值是:"+builder1); //例三:将参数指定的字符串str添加到offset指定的位置 StringBuilder insert(int offset,String str)
System.out.println("\n例三:将参数指定的字符串str添加到offset指定的位置");
StringBuilder sb1=new StringBuilder("I you!");
sb1.insert(2, "miss");
System.out.println("我又想到你了..."+sb1); //例四:移除字符串生成器中的子字符串,从指定的start处开始,到指定的end处结束;
//StringBuilder.delete(int start,String end)
System.out.println("\n例四:移除字符串生成器中的子字符串");
StringBuilder sb2=new StringBuilder("因为喜欢,你让我想成为更好的自己!");
System.out.println("原字符串是:"+sb2);
sb2.delete(0, 5);
System.out.println("移除字符串后是:"+sb2); //例五:将字符串生成器转换为字符串,转换后值不变 StringBuilder.toString()
System.out.println("\n例六:将字符串生成器转换为字符串");
StringBuilder sb3=new StringBuilder("我们总是喜欢拿“顺其自然”来敷衍人生道路上的荆棘坎坷,"
+ "\n却很少承认,真正的顺其自詹,其实是竭尽所能之后的不强求,而非两手一摊的不作为。 by瑞卡斯");
String wordsLike=sb3.toString();
System.out.println(wordsLike); //例七:将汉字和字母转换成Unicode码
System.out.println("\n例七:将汉字和字母转换成Unicode码");
String strUnicode="我想见你时,能不能不管你加不加班,想不想见我。。。好像不能呢~~~";
char[] charArray=strUnicode.toCharArray();
StringBuilder sb4=new StringBuilder();
for(char c:charArray){
sb4.append((int)c+" ");
}
System.out.println(strUnicode+"\n的Unicode码是:\n"+sb4); //范例八:去掉字符串中重复的字符
System.out.println("\n范例八:去掉字符串中重复的字符");
String s8="再见了,互相嫌弃的老同学,再见了,来不及说出的谢谢。";
StringBuilder sb5=new StringBuilder(s8);
System.out.println("原来的字符串是:"+sb5);
System.out.println("原来的字符串长度是:"+sb5.length());
for(int j=0;j<sb5.length();j++){
for(int k=j+1;k<sb5.length();k++){
if(sb5.charAt(j)==sb5.charAt(k))
sb5.deleteCharAt(k);
}
}
System.out.println("现在的字符串是:"+sb5);
System.out.println("现在的字符串长度是:"+sb5.length()); //经典范例九:实现字符串加密
//最常用的:获取字符串的字节数组,再对字节数组中的每个字符进行操作,加密;对字符串进行相反运算,解密。
System.out.println("\n经典范例九:实现字符串加密");
String value="就像我说大海很漂亮,你却说淹死过很多人";
char secret='晴';
System.out.println("原字符串是:"+value);
String encrypt=encryption(value,secret);
System.out.println("加密后的字符串是:"+encrypt);
String uncrypt=encryption(encrypt,secret);
System.out.println("解密后的字符串是:"+uncrypt); //经典范例十:验证字符串是否是回文:即从前往后读和从后往前读一样;
System.out.println("\n经典范例十:验证字符串是否是回文");
//StringBuilder line=new StringBuilder("上海自来,水来自海上");
String line="上海自来水来自海上";
System.out.println("原始字符串是:"+line);
StringBuilder line2=new StringBuilder(line);
line2 =line2.reverse();//字符串生成器中字符反转,如果直接用StringBuffer类型的line转换,line和line2的存储长度是一样的。。。
/****************
* 备注一下原理:StringBuffer 和StringBuilder 节省内存的原理,在于拼接字符串的时候本身的对象不变,
* 一直在变的是数组对象,通过不断的复制生成新的数组对象,达到拼接字符串,
* 而StringBuffer和StringBuilder的代码逻辑一模一样,只是StringBuffer所有的方法都加了cynchronized,所以是线程安全的。
*/
//line2=line2.append("喂~");
System.out.println("返转后的字符串是:"+line2);
int count=0;
if( line.length() != line2.length()){
System.out.println(line+":不是回文诗呵呵");
}else{
for(int y=0;y<line2.length();y++){ if(line.charAt(y)==line2.charAt(y)){
count++;
}
else{
System.out.println(line+":不是回文诗");
break;
}//分支结束 }//循环结束 }//外层分支结束
if(count==line.length()){
System.out.println(line+":是回文诗~~~~");
} //实战开始
/************************
* 1.创建Number类,判断字符串""中字符'i'出现了几次,并输出结果
* 2.去除字符串中的所有空格的方法,试着用for循环和if条件语句实现去除空格
* 3.在项目中创建DateAndTime类,将今天的全部信息格式化后输出,再将日期以“年-月-日”的格式输出
*/
//实战一
System.out.println("1.创建Number类,判断字符串\"\"中字符'i'出现了几次,并输出结果"); } /***********************以下是函数********************************/
// 例四:对手机号码的合法性进行验证(前两位是13、15、18,共11位)
public static String checkTel(String str) {
String telRegex = "1[5,3,8]\\d{9}$";
if (str.matches(telRegex)) {
return str + "\t是合法的手机号。";
} else {
return str + "\t是非法的手机号!";
}
}
// 例五:验证ip地址的合法性
public static String checkIPAdress(String str)
{
// String ipRegex="\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";//验证0~999之间的数字
String ip = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."
+"(00?\\d|1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+"(00?\\d|1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+"(00?\\d|1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$"; //验证0~255之间的数字
if (str.matches(ip)) {
return str + "\t 是合法的ip地址。";
} else {
return str + "\t 是非法的ip地址!";
} } public static String encryption(String value,char secret){
byte[] bt=value.getBytes();
for(int x=0;x<bt.length;x++){
bt[x]=(byte)(bt[x]^(int)secret); }
return new String(bt,0,bt.length);
} }

No1_6.字符串的基本操作2_Java学习笔记的更多相关文章

  1. No1_5.字符串的基本操作_Java学习笔记

    import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.Locale; import java. ...

  2. BZOJ 3555: [Ctsc2014]企鹅QQ [字符串哈希]【学习笔记】

    3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 2046  Solved: 749[Submit][Statu ...

  3. No1_4.数组的基本操作_Java学习笔记

    import java.util.Arrays; public class HelloArrayOp { public static void main(String[] args) { // TOD ...

  4. Linxu内核版本号后面多出字符串或者+号【学习笔记】

    作者:庄泽彬 之前一直没有留意到但是最近在编译内核的时候版本号竟然多出了个加号+号或字符串, 后面终于找到原因了,原来config如果设置了CONFIG_LOCALVERSION_AUTO=y,内核的 ...

  5. 字符串Hash/树Hash学习笔记

    哈希 Tags:字符串 作业部落 评论地址 一.概述 百度百科: 散列表(Hash table/哈希表),是根据关键码值(Key value)而直接进行访问的数据结构. 哈希表常用于比较两个字符串是否 ...

  6. No1_8.类和对象2_Java学习笔记_对象

    对象 /**** * *一.对象 *1.概念:对象是由类抽象出来的,对象可以操作类的属性和方法解决问题,了解对象的创建.操作和消亡很必要: *2.对象的创建: * a. new操作符创建:每实例化一个 ...

  7. Kettle学习笔记(二)— 基本操作

    目录 Kettle学习笔记(一)- 环境部署及运行 Kettle学习笔记(二)- 基本操作 kettle学习笔记(三)- 定时任务的脚本执行 Kettle学习笔记(四)- 总结 打开Kettle 打开 ...

  8. javascript学习笔记(四) Number 数字类型

    数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数  toExponential() 方法 用科学 ...

  9. Linux 学习笔记 1 使用最小的系统,从分区安装系统开始

    我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作,以至于后期,不了解什么是分区以及分区当中最基本的一些概念, 我们不说最细的知识,只求了解这个过程,那直接步入正题,开始第一节的学习 ...

随机推荐

  1. html Table实现表头固定

    最近一直在搞前台琐碎的东西,也学习了一下linux,没有时间对新的东西进行深入的研究和学习,没有写博客,不过归咎其原因还是在于自己的惰怠. 废话不多说,今天想将一个前台页面设计的一个小东西分享一下,那 ...

  2. JavaScript进阶学习的一些建议

    blankyao最近问我如何学习JavaScript,他觉着在理解了JavaScript的语法之后,不知如何去学习JavaScript了. 其实我也是个JavaScript小菜,最近在开发中遇到不少关 ...

  3. 编译protobuf-2.5.0中的错误处理

    最近在编译protobuf-2.5.0源码的时候发现的错误已经应对方法 1. 在源码目录执行 ./configure 命令的时候,发生如下错误 error: C++ preprocessor &quo ...

  4. 类和对象:继承 - 零基础入门学习Python038

    类和对象:继承 让编程改变世界 Change the world by program 上节课的课后作业不知道大家完成的怎样?我们试图模拟一个场景,里边有一只乌龟和十条鱼,乌龟通过吃鱼来补充体力,当乌 ...

  5. production stage

    MP:mass production 批量生产 DV design verification 设计验证 EV engineering verification 工程样品验证 PV process ve ...

  6. C程序设计语言练习题1-3

    练习1-3 修改温度转换程序,使之能在转换表的顶部打印一个标题. 代码如下: #include <stdio.h> // 包含标准库的信息. int main() // 定义名为main的 ...

  7. ios如何判断键盘是否已经显示

    ios如何判断键盘是否已经显示   在群里看到有人问:ios如何判断键盘已经显示在界面上. 其实这个解决很简单: 写一个单例来管理键盘的状态. 这个单例在初始化方法init种监听2个事件,分别是 UI ...

  8. 解压和生成 system.img&data.img ( ext4格式)

    另一篇文章讲述了如何解压和生成system.img, 那是针对yaffs2格式的文件系统镜像. 目前越来越多的Android手机放弃了nand, 更多采用了emmc为内部存储设备. 以emmc为存储设 ...

  9. Altium Designer BGA扇出,原理图中PCB的类和布线规则设置

    本帖隐藏的内容 第一,Altium Designer 认识了这么久,没有用过他的自动扇出功能,今天一试,效果还算不错,不过现在还没有找到不扇出没有网络的引脚的方法,我现在讲我的自动扇出步骤给大家说一下 ...

  10. sp_xml_preparedocument _使用 处理XML文档

      有时会在存储过程中处理一些XML格式的数据,所以会用到sp_xml_preparedocument,他可以将XML数据进行读取,然后使用 MSXML 分析器 (Msxmlsql.dll) 对其进行 ...