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("\n一、创建字符串: 用双引号来声明*******************************"); 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 + "\n" + s1 + "\n" + s2); 28 29 /********************************* 30 * 二、字符串连接 31 */ 32 System.out.println("\n二、字符串连接*******************************"); 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("\n三、获取字符串信息,长度、字符索引位置*******************************"); 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("\n四、获取指定索引位置的字符*******************************"); 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("\n五、去除字符串中的空格*******************************"); 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 + "\n只替换查到的第一个词America后替换成chinese:" + s8ReplaceFirst); 96 97 /********************************* 98 * 七、判断字符串 判断字符串是否相等、是否以指定的字符串开始和结尾 99 */ 100 System.out.println("\n 七、判断字符串 *******************************"); 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 + "\n是否以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("\n 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("\n 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("\n 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) + ":月份简称 \n "; 168 String x3 = String.format(Locale.US, "%te", date) + ":一个月中的某一天 \n"; 169 String x4 = String.format(Locale.US, "%tB", date) + ":月份全称 \n "; 170 String x5 = String.format(Locale.US, "%ta", date) + ":指定环境的星期几简称\n "; 171 String x6 = String.format(Locale.US, "%tA", date) + ":指定环境的星期几全称\n"; 172 String x7 = String.format(Locale.US, "%tc", date) + ":包括全部日期和时间\n "; 173 String x8 = String.format(Locale.US, "%tY", date) + ":四位年份\n "; 174 String x9 = String.format(Locale.US, "%tj", date) + ":一年中的第几天\n "; 175 String x10 = String.format(Locale.US, "%tm", date) + ":月份\n "; 176 String x11 = String.format(Locale.US, "%td", date) + ":一个月中的第几天\n "; 177 String x12 = String.format(Locale.US, "%ty", date) + ":两位年份\n "; 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)\n "; 185 String y2 = String.format("%tI", date) + ":两位数字的12小时制的小时(01~12)\n "; 186 String y3 = String.format("%tk", date) + ":两位数字的12小时制的小时(0~23)\n "; 187 String y4 = String.format("%tl", date) + ":两位数字的12小时制的小时(1~12)\n "; 188 String y5 = String.format("%tM", date) + ":两位数字的分钟\n "; 189 String y6 = String.format("%tS", date) + ":两位数字秒数\n "; 190 String y7 = String.format("%tL", date) + ":三位数字的毫秒数\n "; 191 String y8 = String.format("%tN", date) + ":九位数字的微秒数\n "; 192 String y9 = String.format("%tp", date) + ":指定语言环境的上午或下午标记 am 上午\n "; 193 String y10 = String.format("%ts", date) 194 + ":1970-01-01 00:00:00到现在经过的秒数,即时间戳\n "; 195 String y11 = String.format("%tQ", date) 196 + ":1970-01-01 00:00:00到现在经过的毫秒数\n "; 197 String y12 = String.format("%tZ", date) + ":时区缩写形式的字符串\n "; 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) + ":年-月-日 四位年份\n "; 204 String z2 = String.format("%tD", date) + ":月/日/年 两位年份\n "; 205 String z3 = String.format("%tc", date) + ":全部日期和时间信息\n "; 206 String z4 = String.format("%tr", date) + ":时:分:秒 PM(AM) 12小时制\n "; 207 String z5 = String.format("%tT", date) + ":时:分:秒 24小时制\n "; 208 String z6 = String.format("%tR", date) + ":时:分 24小时制\n "; 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 + "\n" + 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 \t" + format.format(money)); 240 format = NumberFormat.getCurrencyInstance(Locale.US); 241 System.out.println("Locale.US \t" + 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