No1_6.字符串的基本操作2_Java学习笔记
生活随笔
收集整理的這篇文章主要介紹了
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
總結
以上是生活随笔為你收集整理的No1_6.字符串的基本操作2_Java学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到熟鸡蛋预示着什么
- 下一篇: 梦到被咬脚是什么意思