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

时间:2023-03-08 18:50:51
 import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
import java.util.StringTokenizer;
import java.util.Date;
import java.util.Scanner; public class HelloString { public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("终于到字符串这儿了,开始学习~~~"); /*********************************
* 一、创建字符串: 用双引号来声明
*/
System.out.println("\n一、创建字符串: 用双引号来声明*******************************");
// 初始化
String s = new String();
s = "good";
// 用字符数组创建字符串:String(char a[])
char a[] = { 'g', 'o', 'o', 'd', 'a', 'f', 't', 'e', 'r', 'n', 'o',
'o', 'n', '!' };
String s1 = new String(a);
// 截取字符串:String(char a[],int offset,int length),只能用字符数组截取
String s2 = new String(a, 4, 9);
System.out.println(s + "\n" + s1 + "\n" + s2); /*********************************
* 二、字符串连接
*/
System.out.println("\n二、字符串连接*******************************");
// 多个字符串连接、连接其它类型 +
String s3 = new String("Hello");
String s4 = new String("World你好世界!");
String s5 = s3 + " " + s4;
System.out.println(s5);
int runTime = 40;
float workTime = 8.77f;
System.out.println("我每天花" + runTime + "分钟跑步! 然后花" + workTime + "小时上班!");
/*********************************
* 三、获取字符串信息,长度、字符索引位置 length() 长度 indexOf() 字符首次出现位置的索引(没找到值是-1)
* lastIndexOf() 字符最后一次出现位置的索引(没找到值是-1)
*/
System.out
.println("\n三、获取字符串信息,长度、字符索引位置*******************************");
System.out.println("s5字符串\"" + s5 + "\"的长度是" + s5.length());
String s6 = "good morning";
System.out.println("字符o在字串s6:"+s6+"的位置是" + s6.indexOf("o"));
System.out.println("字符o在字串s6:"+s6+"最后的位置是" + s6.lastIndexOf("ing"));
// 如果参数是空串"",则返回结果与调用该字串的length()方法的返回结果相同!!
System.out.println("字符空串在字串s6:"+s6+"最后的位置是(与调用该字串的length()方法的返回结果相同!!)" + s6.lastIndexOf("")); /*********************************
* 四、获取指定索引位置的字符 str.charAt(int index)
*/
System.out.println("\n四、获取指定索引位置的字符*******************************");
String s7 = "I have a dream~";
char myChar = s7.charAt(3);
System.out.println("字符串s7\"I have a dream\"中索引位置是3的字符是:" + myChar); /*********************************
* 五、去除字符串中的空格 六、字符串替换
*/
System.out.println("\n五、去除字符串中的空格*******************************");
System.out.println("六、字符串替换 *******************************"); // 1.去除字符串中的前导、尾部空格 str.trim()
String s8 = " Captain America 3 , hoho!";
String s8Trim = s8.trim();
System.out.println("字串s8的长度是" + s8.length() + ";值是:" + s8);
System.out.println("字串s8Trim的长度是" + s8Trim.length() + ";去除前导尾部空格后的值是:"
+ s8Trim); // 2.去除字符串中的所有空格,该方法利用分割和追加实现去除空格的目的。 StringTokenizer(String str,String delim) StringTokenizer s8St = new StringTokenizer(s8, " "); // 使用空格来分隔字符串
StringBuffer sb = new StringBuffer(); // 定义字符串缓存对象
System.out.println("这个可以直接循环的,用空格做为分隔符提取字符串:");
while (s8St.hasMoreTokens()) { // 判断字符串中是否还有空格
sb.append(s8St.nextToken()); // 向生成器中追加内容,
System.out.println(sb.toString());
}
System.out.println("用StringTokenizer方法去掉s8所有空格之后的字符串是:" + sb);
System.out.println("用StringTokenizer方法去掉s8所有空格之后的字符串是:" + sb.toString()); // 3.去除字符串中的所有空格,用空串替换空格字符。 str.replaceAll(String regex, String
// replacement) String s8ReplaceAll = s8.replaceAll(" ", ""); // replace() 与
// replaceAll()主要区别,前者可以替换转义字符
String s8ReplaceFirst = s8.replaceFirst("America", "Chinese");
System.out.println("替换掉所有空格后:" + s8ReplaceAll);
System.out.println("实在找不到替换哪个词了,嘿嘿..."
+ "\n只替换查到的第一个词America后替换成chinese:" + s8ReplaceFirst); /*********************************
* 七、判断字符串 判断字符串是否相等、是否以指定的字符串开始和结尾
*/
System.out.println("\n 七、判断字符串 *******************************");
// 1.判断字符串是否相等 equals() equalsIgnoreCace()
// s9.equals(anObject) 严格区分大小写 str.equalsIgnoreCase(anotherString)
// 不区分大小写
String s9 = "I have a dream"; // 分配的是栈内存:先进后出
String s9Equals1 = "i have a dream";
String s9Equals2 = new String("I have a dream"); // 分配的是堆内存:顺序随意,主要存放对象
String s9Equals3 = s9;
System.out.println("s9.equals(anObject) 严格区分大小写的结果是:"
+ (s9.equals(s9Equals2)));
System.out.println("str.equalsIgnoreCase(anotherString) 不区分大小写:"
+ (s9.equalsIgnoreCase(s9Equals1)));
System.out.println("==双等号比较的是内存位置,不适宜拿来比较字符串,可以比较数值:"
+ (s9 == s9Equals3)); // 2.判断字符串的开始和结尾
// startWith() endsWith() 用于判断字符串是否以指定的字符开始或结尾的
String s10 = "angry birds!";
boolean s10Start = s10.startsWith("angry");
boolean s19End = s10.endsWith("birds!");
System.out.println(s10 + "是否以字符串angry开始的:" + s10Start
+ "\n是否以birds!结尾的:" + s19End); // 3.字母大小写转换
// str.toUpperCase(); str.toLowerCase()
String s11 = "Dreams Come True!";
System.out.println(s11 + "全部转换成大写后:" + s11.toUpperCase());
System.out.println(s11 + "全部转换成小写后:" + s11.toLowerCase()); // 4.字符串分割
// split(String sign)
String s12 = new String("meet classmate by chance, happy everyday~");
String[] s12Split = s12.split(" |,");
// 分割字符串,返回的结果是数组,num分割次数,无分割所有字符,多个字符分割用|隔开
System.out.println("按分割字符分割后的字符串是:");
for (int i = 0; i < s12Split.length; i++) {
System.out.println(s12Split[i]);
} // 5.根据指定分隔符把字符串分行
System.out.println("\n 1、根据指定分隔符把字符串分行~~~~~~~~~~~~~");
String something = "人是无法完全做到换位思考的,"
+ "因为思想、经历、感官、全都不一样,"
+ "就像我说大海很漂亮,你却说淹死过很多人。~"
+ "认清这世界,然后爱它,就这么一辈子,下一世你可能就不再在这个世界了。《龙猫》";
String st1[] = something.split("。|,|~");
System.out.println("喜欢的话,按分隔符分开后:");
for (int j = 0; j < st1.length; j++) {
System.out.println(st1[j]);
} System.out.println("\n 2、判断字符串是否是数字格式~~~~~~~~~~~~~");
String Snum = new String("889.092"); if (IsNum(Snum)) { // 调用函数,也可以写HelloString.IsNum()
System.out.println(Snum + "是数字格式");
} else {
System.out.println(Snum + "不是数字格式");
} System.out.println("\n 3、格式化字符串:日期格式化、时间格式化、日期/时间组合格式化等~~~~~~~~~~~~~");
// format(String format,Object...args) 返回值都是一个格式化的字符串
// format(Local 1,String format ,Object...args) local是否进行本地化
// 日期格式化
Date date = new Date();
System.out.println("当前的日期是(未格式化):" + date);
String x1 = String.format(Locale.CHINA, "%tb", date);
String x2 = String.format(Locale.US, "%tb", date) + ":月份简称 \n ";
String x3 = String.format(Locale.US, "%te", date) + ":一个月中的某一天 \n";
String x4 = String.format(Locale.US, "%tB", date) + ":月份全称 \n ";
String x5 = String.format(Locale.US, "%ta", date) + ":指定环境的星期几简称\n ";
String x6 = String.format(Locale.US, "%tA", date) + ":指定环境的星期几全称\n";
String x7 = String.format(Locale.US, "%tc", date) + ":包括全部日期和时间\n ";
String x8 = String.format(Locale.US, "%tY", date) + ":四位年份\n ";
String x9 = String.format(Locale.US, "%tj", date) + ":一年中的第几天\n ";
String x10 = String.format(Locale.US, "%tm", date) + ":月份\n ";
String x11 = String.format(Locale.US, "%td", date) + ":一个月中的第几天\n ";
String x12 = String.format(Locale.US, "%ty", date) + ":两位年份\n "; System.out.println(x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10
+ x11 + x12); // 时间格式化
// 转换符:%tH %tI %tk %tl %tM %tS %tL %tN %tp %tz %tZ %ts %tQ
String y1 = String.format("%tH", date) + ":两位数字的24小时制的小时(00~23)\n ";
String y2 = String.format("%tI", date) + ":两位数字的12小时制的小时(01~12)\n ";
String y3 = String.format("%tk", date) + ":两位数字的12小时制的小时(0~23)\n ";
String y4 = String.format("%tl", date) + ":两位数字的12小时制的小时(1~12)\n ";
String y5 = String.format("%tM", date) + ":两位数字的分钟\n ";
String y6 = String.format("%tS", date) + ":两位数字秒数\n ";
String y7 = String.format("%tL", date) + ":三位数字的毫秒数\n ";
String y8 = String.format("%tN", date) + ":九位数字的微秒数\n ";
String y9 = String.format("%tp", date) + ":指定语言环境的上午或下午标记 am 上午\n ";
String y10 = String.format("%ts", date)
+ ":1970-01-01 00:00:00到现在经过的秒数,即时间戳\n ";
String y11 = String.format("%tQ", date)
+ ":1970-01-01 00:00:00到现在经过的毫秒数\n ";
String y12 = String.format("%tZ", date) + ":时区缩写形式的字符串\n "; System.out.println(y1 + y2 + y3 + y4 + y5 + y6 + y7 + y8 + y9 + y10
+ y11 + y12);
// 日期时间组合格式化
// 转换符:%tF %tD %tc %tr %tT %tR
String z1 = String.format("%tF", date) + ":年-月-日 四位年份\n ";
String z2 = String.format("%tD", date) + ":月/日/年 两位年份\n ";
String z3 = String.format("%tc", date) + ":全部日期和时间信息\n ";
String z4 = String.format("%tr", date) + ":时:分:秒 PM(AM) 12小时制\n ";
String z5 = String.format("%tT", date) + ":时:分:秒 24小时制\n ";
String z6 = String.format("%tR", date) + ":时:分 24小时制\n ";
System.out.println(z1 + z2 + z3 + z4 + z5 + z6); // 常规类型格式化
/***********************
* *%b %B 格式化为布尔类型
* %h %H 格式化为散列码
* %s %S 格式化为字符串类型
* %c %C 格式化为字符类型
* %d 格式化为十进制整数
* %o 格式化为八进制整数
* %x %X 格式化为十六进制整数
* %e 格式化为用科学计数法表示的十进制数 1.7000000e+01
* %a 格式化为带有交位数和指数的十六进制浮点值 0X1.C00000001P4
* %n 格式化为特定于平台的行分隔符 %% 字面值%
*/ // 将金额格式化成大写,太难了,先放弃了~~
// test
String name = "sunshine.liu";
String nameSub = name.substring(0, name.indexOf('.')); // 截取字符串
int r = name.indexOf('.');
System.out.println(nameSub + "\n" + r); // 将数字格式转换为货币格式
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个数字,将数字格式转换为货币格式:");
double money = scan.nextDouble();
scan.close();// 关闭资源~~~
System.out.println("Locale类的常量作为构造参数获得不同的货币格式:");
NumberFormat format = NumberFormat.getCurrencyInstance(Locale.CHINA);
System.out.println("Locale.CHINA \t" + format.format(money));
format = NumberFormat.getCurrencyInstance(Locale.US);
System.out.println("Locale.US \t" + format.format(money)); } public static boolean IsNum(String str) { char[] c = str.toCharArray();
for (int n = 0; n < c.length; n++) {
if (Character.isDigit(c[n])) { // 判断字符是否是数字函数
} else {
return false;
}
}
return true;
}
}

输出结果:

 终于到字符串这儿了,开始学习~~~

 一、创建字符串: 用双引号来声明*******************************
good
goodafternoon!
afternoon 二、字符串连接*******************************
Hello World你好世界!
我每天花40分钟跑步! 然后花8.77小时上班! 三、获取字符串信息,长度、字符索引位置*******************************
s5字符串"Hello World你好世界!"的长度是16
字符o在字串s6:good morning的位置是1
字符o在字串s6:good morning最后的位置是9
字符空串在字串s6:good morning最后的位置是(与调用该字串的length()方法的返回结果相同!!)12 四、获取指定索引位置的字符*******************************
字符串s7"I have a dream"中索引位置是3的字符是:a 五、去除字符串中的空格*******************************
六、字符串替换 *******************************
字串s8的长度是34;值是: Captain America 3 , hoho!
字串s8Trim的长度是29;去除前导尾部空格后的值是:Captain America 3 , hoho!
这个可以直接循环的,用空格做为分隔符提取字符串:
Captain
CaptainAmerica
CaptainAmerica3
CaptainAmerica3,
CaptainAmerica3,hoho!
用StringTokenizer方法去掉s8所有空格之后的字符串是:CaptainAmerica3,hoho!
用StringTokenizer方法去掉s8所有空格之后的字符串是:CaptainAmerica3,hoho!
替换掉所有空格后:CaptainAmerica3,hoho!
实在找不到替换哪个词了,嘿嘿...
只替换查到的第一个词America后替换成chinese: Captain Chinese 3 , hoho! 七、判断字符串 *******************************
s9.equals(anObject) 严格区分大小写的结果是:true
str.equalsIgnoreCase(anotherString) 不区分大小写:true
==双等号比较的是内存位置,不适宜拿来比较字符串,可以比较数值:true
angry birds!是否以字符串angry开始的:true
是否以birds!结尾的:true
Dreams Come True!全部转换成大写后:DREAMS COME TRUE!
Dreams Come True!全部转换成小写后:dreams come true!
按分割字符分割后的字符串是:
meet
classmate
by
chance happy
everyday~ 1、根据指定分隔符把字符串分行~~~~~~~~~~~~~
喜欢的话,按分隔符分开后:
人是无法完全做到换位思考的
因为思想、经历、感官、全都不一样
就像我说大海很漂亮
你却说淹死过很多人 认清这世界
然后爱它
就这么一辈子
下一世你可能就不再在这个世界了
《龙猫》 2、判断字符串是否是数字格式~~~~~~~~~~~~~
889.092不是数字格式 3、格式化字符串:日期格式化、时间格式化、日期/时间组合格式化等~~~~~~~~~~~~~
当前的日期是(未格式化):Tue Jun 07 18:06:36 CST 2016
六月Jun:月份简称
7:一个月中的某一天
June:月份全称
Tue:指定环境的星期几简称
Tuesday:指定环境的星期几全称
Tue Jun 07 18:06:36 CST 2016:包括全部日期和时间
2016:四位年份
159:一年中的第几天
06:月份
07:一个月中的第几天
16:两位年份 18:两位数字的24小时制的小时(00~23)
06:两位数字的12小时制的小时(01~12)
18:两位数字的12小时制的小时(0~23)
6:两位数字的12小时制的小时(1~12)
06:两位数字的分钟
36:两位数字秒数
299:三位数字的毫秒数
299000000:九位数字的微秒数
下午:指定语言环境的上午或下午标记 am 上午
1465293996:1970-01-01 00:00:00到现在经过的秒数,即时间戳
1465293996299:1970-01-01 00:00:00到现在经过的毫秒数
CST:时区缩写形式的字符串 2016-06-07:年-月-日 四位年份
06/07/16:月/日/年 两位年份
星期二 六月 07 18:06:36 CST 2016:全部日期和时间信息
06:06:36 下午:时:分:秒 PM(AM) 12小时制
18:06:36:时:分:秒 24小时制
18:06:时:分 24小时制 sunshine
8
请输入一个数字,将数字格式转换为货币格式:
88.77
Locale类的常量作为构造参数获得不同的货币格式:
Locale.CHINA ¥88.77
Locale.US $88.77