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

  1 import java.text.DecimalFormat;
  2 import java.text.NumberFormat;
  3 import java.util.Locale;
  4 import java.util.StringTokenizer;
  5 import java.util.Date;
  6 import java.util.Scanner;
  7 
  8 public class HelloString {
  9 
 10     public static void main(String[] args) {
 11         // TODO Auto-generated method stub
 12         System.out.println("终于到字符串这儿了,开始学习~~~");
 13 
 14         /*********************************
 15          * 一、创建字符串: 用双引号来声明
 16          */
 17         System.out.println("
一、创建字符串: 用双引号来声明*******************************");
 18         // 初始化
 19         String s = new String();
 20         s = "good";
 21         // 用字符数组创建字符串:String(char a[])
 22         char a[] = { 'g', 'o', 'o', 'd', 'a', 'f', 't', 'e', 'r', 'n', 'o',
 23                 'o', 'n', '!' };
 24         String s1 = new String(a);
 25         // 截取字符串:String(char a[],int offset,int length),只能用字符数组截取
 26         String s2 = new String(a, 4, 9);
 27         System.out.println(s + "
" + s1 + "
" + s2);
 28 
 29         /*********************************
 30          * 二、字符串连接
 31          */
 32         System.out.println("
二、字符串连接*******************************");
 33         // 多个字符串连接、连接其它类型 +
 34         String s3 = new String("Hello");
 35         String s4 = new String("World你好世界!");
 36         String s5 = s3 + " " + s4;
 37         System.out.println(s5);
 38         int runTime = 40;
 39         float workTime = 8.77f;
 40         System.out.println("我每天花" + runTime + "分钟跑步! 然后花" + workTime + "小时上班!");
 41         /*********************************
 42          * 三、获取字符串信息,长度、字符索引位置 length() 长度 indexOf() 字符首次出现位置的索引(没找到值是-1)
 43          * lastIndexOf() 字符最后一次出现位置的索引(没找到值是-1)
 44          */
 45         System.out
 46                 .println("
三、获取字符串信息,长度、字符索引位置*******************************");
 47         System.out.println("s5字符串"" + s5 + ""的长度是" + s5.length());
 48         String s6 = "good morning";
 49         System.out.println("字符o在字串s6:"+s6+"的位置是" + s6.indexOf("o"));
 50         System.out.println("字符o在字串s6:"+s6+"最后的位置是" + s6.lastIndexOf("ing"));
 51         // 如果参数是空串"",则返回结果与调用该字串的length()方法的返回结果相同!!
 52         System.out.println("字符空串在字串s6:"+s6+"最后的位置是(与调用该字串的length()方法的返回结果相同!!)" + s6.lastIndexOf(""));
 53 
 54         /*********************************
 55          * 四、获取指定索引位置的字符 str.charAt(int index)
 56          */
 57         System.out.println("
四、获取指定索引位置的字符*******************************");
 58         String s7 = "I have a dream~";
 59         char myChar = s7.charAt(3);
 60         System.out.println("字符串s7"I have a dream"中索引位置是3的字符是:" + myChar);
 61 
 62         /*********************************
 63          * 五、去除字符串中的空格 六、字符串替换
 64          */
 65         System.out.println("
五、去除字符串中的空格*******************************");
 66         System.out.println("六、字符串替换    *******************************");
 67 
 68         // 1.去除字符串中的前导、尾部空格 str.trim()
 69         String s8 = "     Captain America 3     , hoho!";
 70         String s8Trim = s8.trim();
 71         System.out.println("字串s8的长度是" + s8.length() + ";值是:" + s8);
 72         System.out.println("字串s8Trim的长度是" + s8Trim.length() + ";去除前导尾部空格后的值是:"
 73                 + s8Trim);
 74 
 75         // 2.去除字符串中的所有空格,该方法利用分割和追加实现去除空格的目的。 StringTokenizer(String str,String delim)
 76 
 77         StringTokenizer s8St = new StringTokenizer(s8, " "); // 使用空格来分隔字符串
 78         StringBuffer sb = new StringBuffer(); // 定义字符串缓存对象
 79         System.out.println("这个可以直接循环的,用空格做为分隔符提取字符串:");
 80         while (s8St.hasMoreTokens()) { // 判断字符串中是否还有空格
 81             sb.append(s8St.nextToken()); // 向生成器中追加内容,
 82             System.out.println(sb.toString());
 83         }
 84         System.out.println("用StringTokenizer方法去掉s8所有空格之后的字符串是:" + sb);
 85         System.out.println("用StringTokenizer方法去掉s8所有空格之后的字符串是:" + sb.toString());
 86 
 87         // 3.去除字符串中的所有空格,用空串替换空格字符。 str.replaceAll(String regex, String
 88         // replacement)
 89 
 90         String s8ReplaceAll = s8.replaceAll(" ", ""); // replace() 与
 91                                                         // replaceAll()主要区别,前者可以替换转义字符
 92         String s8ReplaceFirst = s8.replaceFirst("America", "Chinese");
 93         System.out.println("替换掉所有空格后:" + s8ReplaceAll);
 94         System.out.println("实在找不到替换哪个词了,嘿嘿..."
 95                 + "
只替换查到的第一个词America后替换成chinese:" + s8ReplaceFirst);
 96 
 97         /*********************************
 98          * 七、判断字符串 判断字符串是否相等、是否以指定的字符串开始和结尾
 99          */
100         System.out.println("
  七、判断字符串    *******************************");
101         // 1.判断字符串是否相等 equals() equalsIgnoreCace()
102         // s9.equals(anObject) 严格区分大小写 str.equalsIgnoreCase(anotherString)
103         // 不区分大小写
104         String s9 = "I have a dream"; // 分配的是栈内存:先进后出
105         String s9Equals1 = "i have a dream";
106         String s9Equals2 = new String("I have a dream"); // 分配的是堆内存:顺序随意,主要存放对象
107         String s9Equals3 = s9;
108         System.out.println("s9.equals(anObject) 严格区分大小写的结果是:"
109                 + (s9.equals(s9Equals2)));
110         System.out.println("str.equalsIgnoreCase(anotherString) 不区分大小写:"
111                 + (s9.equalsIgnoreCase(s9Equals1)));
112         System.out.println("==双等号比较的是内存位置,不适宜拿来比较字符串,可以比较数值:"
113                 + (s9 == s9Equals3));
114 
115         // 2.判断字符串的开始和结尾
116         // startWith() endsWith() 用于判断字符串是否以指定的字符开始或结尾的
117         String s10 = "angry birds!";
118         boolean s10Start = s10.startsWith("angry");
119         boolean s19End = s10.endsWith("birds!");
120         System.out.println(s10 + "是否以字符串angry开始的:" + s10Start
121                 + "
是否以birds!结尾的:" + s19End);
122 
123         // 3.字母大小写转换
124         // str.toUpperCase(); str.toLowerCase()
125         String s11 = "Dreams Come True!";
126         System.out.println(s11 + "全部转换成大写后:" + s11.toUpperCase());
127         System.out.println(s11 + "全部转换成小写后:" + s11.toLowerCase());
128 
129         // 4.字符串分割
130         // split(String sign)
131         String s12 = new String("meet classmate by chance, happy everyday~");
132         String[] s12Split = s12.split(" |,");
133         // 分割字符串,返回的结果是数组,num分割次数,无分割所有字符,多个字符分割用|隔开
134         System.out.println("按分割字符分割后的字符串是:");
135         for (int i = 0; i < s12Split.length; i++) {
136             System.out.println(s12Split[i]);
137         }
138 
139         // 5.根据指定分隔符把字符串分行
140         System.out.println("
  1、根据指定分隔符把字符串分行~~~~~~~~~~~~~");
141         String something = "人是无法完全做到换位思考的," 
142                 + "因为思想、经历、感官、全都不一样,"
143                 + "就像我说大海很漂亮,你却说淹死过很多人。~"
144                 + "认清这世界,然后爱它,就这么一辈子,下一世你可能就不再在这个世界了。《龙猫》";
145         String st1[] = something.split("。|,|~");
146         System.out.println("喜欢的话,按分隔符分开后:");
147         for (int j = 0; j < st1.length; j++) {
148             System.out.println(st1[j]);
149         }
150 
151         System.out.println("
  2、判断字符串是否是数字格式~~~~~~~~~~~~~");
152         String Snum = new String("889.092");
153 
154         if (IsNum(Snum)) { // 调用函数,也可以写HelloString.IsNum()
155             System.out.println(Snum + "是数字格式");
156         } else {
157             System.out.println(Snum + "不是数字格式");
158         }
159 
160         System.out.println("
  3、格式化字符串:日期格式化、时间格式化、日期/时间组合格式化等~~~~~~~~~~~~~");
161         // format(String format,Object...args) 返回值都是一个格式化的字符串
162         // format(Local 1,String format ,Object...args) local是否进行本地化
163         // 日期格式化
164         Date date = new Date();
165         System.out.println("当前的日期是(未格式化):" + date);
166         String x1 = String.format(Locale.CHINA, "%tb", date);
167         String x2 = String.format(Locale.US, "%tb", date) + ":月份简称 
 ";
168         String x3 = String.format(Locale.US, "%te", date) + ":一个月中的某一天 
";
169         String x4 = String.format(Locale.US, "%tB", date) + ":月份全称 
 ";
170         String x5 = String.format(Locale.US, "%ta", date) + ":指定环境的星期几简称
 ";
171         String x6 = String.format(Locale.US, "%tA", date) + ":指定环境的星期几全称
";
172         String x7 = String.format(Locale.US, "%tc", date) + ":包括全部日期和时间
 ";
173         String x8 = String.format(Locale.US, "%tY", date) + ":四位年份
 ";
174         String x9 = String.format(Locale.US, "%tj", date) + ":一年中的第几天
 ";
175         String x10 = String.format(Locale.US, "%tm", date) + ":月份
 ";
176         String x11 = String.format(Locale.US, "%td", date) + ":一个月中的第几天
 ";
177         String x12 = String.format(Locale.US, "%ty", date) + ":两位年份
 ";
178 
179         System.out.println(x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10
180                 + x11 + x12);
181 
182         // 时间格式化
183         // 转换符:%tH %tI %tk %tl %tM %tS %tL %tN %tp %tz %tZ %ts %tQ
184         String y1 = String.format("%tH", date) + ":两位数字的24小时制的小时(00~23)
 ";
185         String y2 = String.format("%tI", date) + ":两位数字的12小时制的小时(01~12)
 ";
186         String y3 = String.format("%tk", date) + ":两位数字的12小时制的小时(0~23)
 ";
187         String y4 = String.format("%tl", date) + ":两位数字的12小时制的小时(1~12)
 ";
188         String y5 = String.format("%tM", date) + ":两位数字的分钟
 ";
189         String y6 = String.format("%tS", date) + ":两位数字秒数
 ";
190         String y7 = String.format("%tL", date) + ":三位数字的毫秒数
 ";
191         String y8 = String.format("%tN", date) + ":九位数字的微秒数
 ";
192         String y9 = String.format("%tp", date) + ":指定语言环境的上午或下午标记 am 上午
 ";
193         String y10 = String.format("%ts", date)
194                 + ":1970-01-01 00:00:00到现在经过的秒数,即时间戳
 ";
195         String y11 = String.format("%tQ", date)
196                 + ":1970-01-01 00:00:00到现在经过的毫秒数
 ";
197         String y12 = String.format("%tZ", date) + ":时区缩写形式的字符串
 ";
198 
199         System.out.println(y1 + y2 + y3 + y4 + y5 + y6 + y7 + y8 + y9 + y10
200                 + y11 + y12);
201         // 日期时间组合格式化
202         // 转换符:%tF %tD %tc %tr %tT %tR
203         String z1 = String.format("%tF", date) + ":年-月-日 四位年份
 ";
204         String z2 = String.format("%tD", date) + ":月/日/年 两位年份
 ";
205         String z3 = String.format("%tc", date) + ":全部日期和时间信息
 ";
206         String z4 = String.format("%tr", date) + ":时:分:秒 PM(AM) 12小时制
 ";
207         String z5 = String.format("%tT", date) + ":时:分:秒 24小时制
 ";
208         String z6 = String.format("%tR", date) + ":时:分  24小时制
 ";
209         System.out.println(z1 + z2 + z3 + z4 + z5 + z6);
210 
211         // 常规类型格式化
212         /***********************
213          * *%b %B 格式化为布尔类型 
214          * %h %H 格式化为散列码 
215          * %s %S 格式化为字符串类型 
216          * %c %C 格式化为字符类型 
217          * %d  格式化为十进制整数 
218          * %o 格式化为八进制整数
219          * %x %X 格式化为十六进制整数 
220          * %e 格式化为用科学计数法表示的十进制数     1.7000000e+01 
221          * %a 格式化为带有交位数和指数的十六进制浮点值 0X1.C00000001P4 
222          * %n 格式化为特定于平台的行分隔符 %% 字面值%
223          */
224 
225         // 将金额格式化成大写,太难了,先放弃了~~
226         // test
227         String name = "sunshine.liu";
228         String nameSub = name.substring(0, name.indexOf('.')); // 截取字符串
229         int r = name.indexOf('.');
230         System.out.println(nameSub + "
" + r);
231 
232         // 将数字格式转换为货币格式
233         Scanner scan = new Scanner(System.in);
234         System.out.println("请输入一个数字,将数字格式转换为货币格式:");
235         double money = scan.nextDouble();
236         scan.close();// 关闭资源~~~
237         System.out.println("Locale类的常量作为构造参数获得不同的货币格式:");
238         NumberFormat format = NumberFormat.getCurrencyInstance(Locale.CHINA);
239         System.out.println("Locale.CHINA 	" + format.format(money));
240         format = NumberFormat.getCurrencyInstance(Locale.US);
241         System.out.println("Locale.US 	" + format.format(money));
242 
243     }
244 
245     public static boolean IsNum(String str) {
246 
247         char[] c = str.toCharArray();
248         for (int n = 0; n < c.length; n++) {
249             if (Character.isDigit(c[n])) { // 判断字符是否是数字函数
250             } else {
251                 return false;
252             }
253         }
254         return true;
255     }
256 }

输出结果:

  1 终于到字符串这儿了,开始学习~~~
  2 
  3 一、创建字符串: 用双引号来声明*******************************
  4 good
  5 goodafternoon!
  6 afternoon
  7 
  8 二、字符串连接*******************************
  9 Hello World你好世界!
 10 我每天花40分钟跑步! 然后花8.77小时上班!
 11 
 12 三、获取字符串信息,长度、字符索引位置*******************************
 13 s5字符串"Hello World你好世界!"的长度是16
 14 字符o在字串s6:good morning的位置是1
 15 字符o在字串s6:good morning最后的位置是9
 16 字符空串在字串s6:good morning最后的位置是(与调用该字串的length()方法的返回结果相同!!)12
 17 
 18 四、获取指定索引位置的字符*******************************
 19 字符串s7"I have a dream"中索引位置是3的字符是:a
 20 
 21 五、去除字符串中的空格*******************************
 22 六、字符串替换    *******************************
 23 字串s8的长度是34;值是:     Captain America 3     , hoho!
 24 字串s8Trim的长度是29;去除前导尾部空格后的值是:Captain America 3     , hoho!
 25 这个可以直接循环的,用空格做为分隔符提取字符串:
 26 Captain
 27 CaptainAmerica
 28 CaptainAmerica3
 29 CaptainAmerica3,
 30 CaptainAmerica3,hoho!
 31 用StringTokenizer方法去掉s8所有空格之后的字符串是:CaptainAmerica3,hoho!
 32 用StringTokenizer方法去掉s8所有空格之后的字符串是:CaptainAmerica3,hoho!
 33 替换掉所有空格后:CaptainAmerica3,hoho!
 34 实在找不到替换哪个词了,嘿嘿...
 35 只替换查到的第一个词America后替换成chinese:     Captain Chinese 3     , hoho!
 36 
 37   七、判断字符串    *******************************
 38 s9.equals(anObject) 严格区分大小写的结果是:true
 39 str.equalsIgnoreCase(anotherString) 不区分大小写:true
 40 ==双等号比较的是内存位置,不适宜拿来比较字符串,可以比较数值:true
 41 angry birds!是否以字符串angry开始的:true
 42 是否以birds!结尾的:true
 43 Dreams Come True!全部转换成大写后:DREAMS COME TRUE!
 44 Dreams Come True!全部转换成小写后:dreams come true!
 45 按分割字符分割后的字符串是:
 46 meet
 47 classmate
 48 by
 49 chance
 50 
 51 happy
 52 everyday~
 53 
 54   1、根据指定分隔符把字符串分行~~~~~~~~~~~~~
 55 喜欢的话,按分隔符分开后:
 56 人是无法完全做到换位思考的
 57 因为思想、经历、感官、全都不一样
 58 就像我说大海很漂亮
 59 你却说淹死过很多人
 60 
 61 认清这世界
 62 然后爱它
 63 就这么一辈子
 64 下一世你可能就不再在这个世界了
 65 《龙猫》
 66 
 67   2、判断字符串是否是数字格式~~~~~~~~~~~~~
 68 889.092不是数字格式
 69 
 70   3、格式化字符串:日期格式化、时间格式化、日期/时间组合格式化等~~~~~~~~~~~~~
 71 当前的日期是(未格式化):Tue Jun 07 18:06:36 CST 2016
 72 六月Jun:月份简称 
 73  7:一个月中的某一天 
 74 June:月份全称 
 75  Tue:指定环境的星期几简称
 76  Tuesday:指定环境的星期几全称
 77 Tue Jun 07 18:06:36 CST 2016:包括全部日期和时间
 78  2016:四位年份
 79  159:一年中的第几天
 80  06:月份
 81  07:一个月中的第几天
 82  16:两位年份
 83  
 84 18:两位数字的24小时制的小时(00~23 85  06:两位数字的12小时制的小时(01~12 86  18:两位数字的12小时制的小时(0~23 87  6:两位数字的12小时制的小时(1~12 88  06:两位数字的分钟
 89  36:两位数字秒数
 90  299:三位数字的毫秒数
 91  299000000:九位数字的微秒数
 92  下午:指定语言环境的上午或下午标记 am 上午
 93  1465293996:1970-01-01 00:00:00到现在经过的秒数,即时间戳
 94  1465293996299:1970-01-01 00:00:00到现在经过的毫秒数
 95  CST:时区缩写形式的字符串
 96  
 97 2016-06-07:年-月-日 四位年份
 98  06/07/16:月/日/年 两位年份
 99  星期二 六月 07 18:06:36 CST 2016:全部日期和时间信息
100  06:06:36 下午:时:分:秒 PM(AM) 12小时制
101  18:06:36:时:分:秒 24小时制
102  18:06:时:分  24小时制
103  
104 sunshine
105 8
106 请输入一个数字,将数字格式转换为货币格式:
107 88.77
108 Locale类的常量作为构造参数获得不同的货币格式:
109 Locale.CHINA     ¥88.77
110 Locale.US     $88.77