String
package com.neuedu.day08;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
import org.junit.Test;
public class Str {
// String // 已学的:length() equal() startWith endWith indexOf lastindexOf charAt // substring (int begin) substring(int begin,int end)字符串截取
@Test
public void myTest01() {
String a = "abc@http:www.baidu.comgaig";
String suba = a.substring(2);// 从索引为2的位置开始截取,包括2
System.out.println(suba);
String suba2 = a.substring(2, 7);// start end-1
System.out.println(suba2);
}
//trim 去除字符串前后空格
@Test
public void myTest02() {
String a = " agfagag dagagag ";
String suba = a.trim();// 去掉首尾的空格,不能去掉中间的空格
}
//replace 替换
@Test
public void myTest03() {
String a = "name: dagagagag";
String suba = a.replace("name", "姓名");
System.out.println(suba);
}
@Test
public void myTest04() {
java.lang.String a= "13901001139 ";
java.lang.String suba=a.replaceAll("(\\d{3}\\d*(\\d{4})","$1****$2");
System.out.println(suba);
}
// split 重点拆分
@Test
public void myTest05() {
String a = "张三,18,13904001139;李四,19,13904001140;王五,20,13904001141";
String[] users = a.split(";");
for (int i = 0; i < users.length; i++) {
String user = users[i];
System.out.println(user);
String[] userinfo = user.split(",");
for (int j = 0; j < userinfo.length; j++) {
System.out.println(userinfo[j]);
}
}
}
// 编码方式比较 编码解码
@Test
public void myTest06() throws UnsupportedEncodingException {
// 字节数 uft-8 3字节 国际化
// gbk(中文简繁)+gb2312(中文简) 2字节 支持中文
// iso8859-1 1字节
String a = "中";
byte[] bytes = a.getBytes("utf-8");
System.out.println(bytes.length);
byte[] gbks = a.getBytes("gbk");
System.out.println(gbks.length);
byte[] isos = a.getBytes("iso8859-1");
System.out.println(isos.length);
// 再转换成字符串
String a_new = new String(bytes, "utf-8");
System.out.println(a_new);
String b_new = new String(gbks, "gbk");
System.out.println(b_new);
String c_new = new String(isos, "iso8859-1");
System.out.println(c_new);
}
// StringBuffer // append // reverse
@Test
public void myTest07() {
StringBuffer s1 = new StringBuffer("select a.empno,a.ename,b.dname").append("from empa,dept b")
.append("wgere a.deptno=b.deptno");// 字符串连接
System.out.println(s1.toString());
}
@Test
public void myTest08() {
StringBuffer s1 = new StringBuffer("select a.empno,a.ename,b.dname").append("from empa,dept b")
.append("wgere a.deptno=b.deptno");// 字符串连接
StringBuffer s1_new = s1.reverse();
System.out.println(s1_new.toString());
}
@Test
public void myTest09() {
StringBuffer s1 = new StringBuffer("123213");
String s1_old = s1.toString();
StringBuffer s1_new = s1.reverse();// reverse 内容反转
System.out.println(s1_new.toString());
if (s1.equals(s1_new)) {
System.out.println("回文字");
} else {
System.out.println("不是回文字");
}
}
@Test
public void test10() {
/*
* String a = "123"; System.out.println(a.hashCode()); a=a+"45";
* System.out.println(a.hashCode());
*/
final StringBuffer sb = new StringBuffer("123");
System.out.println(sb.hashCode());
sb.append("45");
System.out.println(sb.hashCode());
// sb = new StringBuffer();
System.out.println(sb.hashCode());
}
// StringBuffer和StringB // Math类(简单)
@Test
public void test11() {
// round四舍五入 floor向下取整 ceil向上取整
double d = 123.45;
double d_new = Math.ceil(d);
System.out.println(d_new);
double d1 = 123.45;
double d1_new = Math.floor(d);
System.out.println(d1_new);
double d2 = 123.51;
double d2_new = Math.round(d);
System.out.println(d2_new);
}
// pow(int a,int b)a的b次方
@Test
public void test12() {
double d = Math.pow(2, 4);
System.out.println(d);
}
// 海伦公式,
@Test
public void test13() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入三角形的三边");
double a, b, c;
a = sc.nextInt();
b = sc.nextInt();
c = sc.nextInt();
double p = (a + b + c) / 2;
double s = Math.sqrt(p * (p - a) * (p - b) * (p - c));
System.out.println(s);
}
// random取随机数
@Test
public void test14() {
// 0-1之间的数
System.out.println(Math.random());
// 0-10之间的数
// 20-30之间的数
System.out.println(20 + Math.random() * 11);
// m-n之间的数 (m+Math.random()*(n-m+1));
System.out.println((int) (20 + Math.random() * (30 - 20 + 1)));
}
// 日期类(复杂一点) // 日期类和字符串的转换
@Test
public void test15() {
System.out.println(System.currentTimeMillis() / 1000);
Date old = new Date(1591513151300l);// 日期格式
System.out.println(old);
Date now = new Date();
System.out.println(now);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date current;
try {
current = sdf.parse("2020-08-14 14:17:28");// 字符串转时间
System.out.println(current);
java.lang.String s1 = sdf.format(current);
System.out.println(s1);// 时间转字符串
} catch (ParseException e) {
System.out.println("日期格式不对");
e.printStackTrace();
}
}
@Test
public void test16() {
Calendar c = Calendar.getInstance();
c.set(2020, 5, 14);
Date now = c.getTime();
System.out.println(now);
System.out.println(c.getFirstDayOfWeek());
System.out.println(c.getTimeInMillis());
System.out.println(c.getTimeZone());
// 今年有多少星期
System.out.println(c.getWeeksInWeekYear());
// 年月日时分秒
System.out.println(c.getWeekYear());
System.out.println(c.get(c.YEAR));
System.out.println(c.get(c.MONTH));
System.out.println(c.get(c.DATE));
System.out.println(c.get(c.HOUR));
System.out.println(c.get(c.MINUTE));
System.out.println(c.get(Calendar.SECOND));
// WEEK_OF_YEAR WEEK_OF_MONTH DAY_OF_MONTH DAY_OF_YEAR DAY_OF_WEEK
// DAY_OF_WEEK_IN_MONTH
System.out.println(c.get(c.WEEK_OF_YEAR));// 38
System.out.println(c.get(c.WEEK_OF_MONTH));// 3 当前日期在一个月里的第几周
System.out.println(c.get(c.DAY_OF_MONTH));// 14
System.out.println(c.get(c.DAY_OF_YEAR));// 258
System.out.println(c.get(c.DAY_OF_WEEK));// 2 一个月当中的第几周
System.out.println(c.get(c.DAY_OF_WEEK_IN_MONTH));// 2 计算当前日期的周N,是本月的第几个周N
}
@Test
public void test17() {
Calendar c = Calendar.getInstance();
c.set(2020, 8, 14);
c.add(Calendar.HOUR, 3);
System.out.println(c.getTime());
}
// 单例模式
package com.neuedu.day08;
//懒汉式
public class SingletonLazy {
// 定义一个私有的,静态的,类型为其本身的类变量
private static SingletonLazy instance = null;
// 无参构造方法私有化
private SingletonLazy() {
super();
}
//3.公有的方法里实例化一次这个对象,给用户返回
public static SingletonLazy getInstance() {
if(instance==null)
instance =new SingletonLazy();
return instance;
}
}
@Test
public void test19() {
SingletonLazy s1 = SingletonLazy.getInstance();
SingletonLazy s2 = SingletonLazy.getInstance();
System.out.println(s1);
System.out.println(s2);
}
}
package com.neuedu.day08;
//饿汉式
public class Singleton {
// 定义一个私有的,静态的,类型为其本身的类变量
private static Singleton instance = null;
// 无参构造方法私有化
private Singleton() {
super();
}
//3.公有的方法里实例化一次这个对象,给用户返回
public static Singleton getInstance() {
return instance;
}
}
@Test
public void test18() {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1);
System.out.println(s2);
}
作业
package com.neuedu.day08;
import java.util.Random;
import java.util.Scanner;
import org.junit.Test;
1、分别在控制台输入字符串和子字符串,并计算字符串中子字符串出现的次数。
public class HomeWork {
@Test
public void myTest01() {
Scanner sc = new Scanner(System.in);
System.out.println("输入字符串");
java.lang.String s = sc.next();
System.out.println("输入子字符串");
java.lang.String s1 = sc.next();
int sum = 0;
int length = s1.length();
for (int i = 0; i < s.length() - s1.length() + 1; i++) {
String S2 = new String(null, s1);
java.lang.String s2 = s.substring(i, s1.length() + i);
if (s2.equals(s1)) {
sum++;
}
}
System.out.println(sum);
}
2、请编程实现:由键盘输入的任意一组字符,统计其中大写字母的个数m和小写字母的个数n,并输出m、n中的较大者。
@Test
public void myTest02() {
Scanner sc = new Scanner(System.in);
System.out.println("输入字符串");
java.lang.String s = sc.next();
int m = 0, n = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') {
m++;
}
if (s.charAt(i) >= 'a' && s.charAt(i) <= 'z') {
n++;
}
}
if (m >= n) {
System.out.println(m);
} else {
System.out.println(n);
}
}
3.有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。
@Test
public void myTest03() {
Scanner sc = new Scanner(System.in);
System.out.println("输入字符串");
java.lang.String s = sc.next();
int ch = 0, en = 0, no = 0;
for (int i = 0; i < s.length(); i++) {
if ((s.charAt(i) >= 'a' && s.charAt(i) <= 'z') || (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z')) {
en++;
} else if ((s.charAt(i) >= '0' && s.charAt(i) <= '9')) {
no++;
} else {
ch++;
}
}
System.out.println("中文字符数" + ch);
System.out.println("英文字符数" + en);
System.out.println("数字字符数" + no);
}
4、编写一个方法为物品生成一个指定长度的编号,
要求编号的每一位或者为0到9的数字,
或者为A到Z的大写字母,每次产生的编号是随机的。
@Test
public void myTest04() {
Scanner sc = new Scanner(System.in);
System.out.println("输入指定长度");
int no = sc.nextInt();
char s[] =new char[no];
for(int i=0;i<no;i++)
{
long c= Math.round(Math.random()*500);
int sum=(int) c;
char s1=(char)sum;
s[i]=s1;
if(s[i]>='A'&&s[i]<='Z')
{
continue;
}
else if(s[i]>='0'&&s[i]<='9')
{
continue;
}
else
{
i--;
}
}
for(int i=0;i<no;i++)
{
System.out.print(s[i]);
}
}
}