Java中常见类

String、StringBuffer 和 Stringbuilder类

字符串就是一连串的字符序列,Java提供了 String和 Stringbuffer两个类来封装字符串,并提供子一系列方法来操作字符串对象。
String类是不可变类,即一旦一个 String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
Stringbuffer对象则代表一个字符序列可变的字符串,当一个 Stringbuffer被创建以后,通过String Buffer提供的 append、 inserto、 reverse、 setcharato、 setlengtho等方法可以改变这个字符串对象的字符序列。一旦通过 String Buffer生成了最终想要的字符串,就可以调用它的 tostring(方法将其转换为一个 String对象。
从JDK1.5开始出现的 StringBuilder类,也代表字符串对象。实际上, Stringbuilder和 Stringbuffer基本相似。两个类的构造器和方法也基本相同。不同的是, StringBuffer是线程安全的,而 StringBuilder则没有实现线程安全功能,所以性能略高。
因此在通常情况下,如果需要创建一个内容可变的字符串对象,则应该优先考虑使用 StringBuilder类。然后使用toString转换为String

public class StringDemo {
	static String Foo() {
		return "AB";
	}

	public static void main(String[] args) {
		String str1 = "ABCD";
		String str2 = "A" + "B" + "C" + "D";
		String str3 = "AB" + "CD";
		String str4 = new String("ABCD");
		final String tmp = "AB";
		String str5 = tmp + "CD";
		String str6 = Foo() + "CD";
		System.out.println(str1 == str2);// true
		System.out.println(str1 == str3);// true
		System.out.println(str1 == str4);// false
		System.out.println(str1 == str5);// false
		System.out.println(str1 == str6);// false
		System.out.println("-----------------");
		System.out.println("Bbc".compareTo("abc"));//-31
		
		// String 的创建转换
		char[] cs = {'A','l','l','e','n'};
		String str = new String(cs);
		char[] cs2 = str.toCharArray();
		byte[] bs = {65,66,67};
		str = new String(bs);//"ABC"
		byte[] bs2 = str.getBytes();
		
		// String 获取字符串信息
		str = "abcAbcEDF";
		System.out.println(str.charAt(0));
		System.out.println(str.indexOf("Ab"));//3 第一次出现Ab的索引
		System.out.println(str.lastIndexOf("b"));//4 最后一次出现b的索引
		
		// String 比较
		System.out.println("abv".equals("abv"));//true
		System.out.println("abv".equalsIgnoreCase("abV"));//true
		System.out.println("leno".contentEquals("leno"));//true  contentEquals 相当于 equals
		System.out.println("leno".contentEquals("leno"));//true
		
		// String 大小写转换
		System.out.println("abc".toUpperCase());
		System.out.println("abc".toLowerCase());
		
		// String 获取子字符串
		System.out.println("abcdefg".substring(3));//"defg"
		System.out.println("abcdefg".substring(3,5));//"de"
		
		// 分割字符串,(以“”为整体作为分隔符,前向的),其实参数1是正则表达式
		String[] temp1 = "abcdefga".split("a");// "","bcdefg"
		String[] temp2 = "abcdefghi".split("fg");// "abcde","hi"
		String[] temp3 = "abcdefghi".split("[f,g]");// "abcde","","hi"
		String[] temp4 = "abcdefghi".split("[fg]");// "abcde","","hi"
		String[] temp5 = "abcdefga".split("a", 0);// "","bcdefg"
		String[] temp6 = "abcdefga".split("a", -1);// "","bcdefg",""
		//字符串以什么开头或结尾
		System.out.println("hello.txt".startsWith("hello"));//true
		System.out.println("hello.txt".startsWith(""));//true
		System.out.println("hello.txt".startsWith("hello.txt"));//true
		System.out.println("hello.txt".endsWith(".txt"));//true
		System.out.println("hello.txt".endsWith(""));//true
		System.out.println("hello.txt".endsWith("hello.txt"));//true	
	}
}
public class StringDemo2 {

	public static void main(String[] args) {
		// 比较 String、StringBuffer、StringBuilder 拼接3000次字符串 的耗时
		test1();//1806
		test2();//2
		test3();//1
		//结论:拼接字符串,尽量用StringBuffer、StringBuilder
	}

	// String
	private static void test1() {
		String str1 = "";
		long begin = System.currentTimeMillis();
		for (int i = 0; i < 30000; i++) {
			str1 += i;
		}
		long end = System.currentTimeMillis();// 
		System.out.println(end - begin);

	}

	// StringBuffer
	private static void test2() {
		StringBuffer str1 = new StringBuffer("");
		long begin = System.currentTimeMillis();
		for (int i = 0; i < 30000; i++) {
			str1.append(i);
		}
		long end = System.currentTimeMillis();// 
		System.out.println(end - begin);

	}

	// StringBuilder
	private static void test3() {
		StringBuilder str1 = new StringBuilder("");
		long begin = System.currentTimeMillis();
		for (int i = 0; i < 30000; i++) {
			str1.append(i);
		}
		long end = System.currentTimeMillis();// 
		System.out.println(end - begin);

	}

}

Math

import java.math.BigDecimal;
import java.math.BigInteger;

public class MathDemo {
	public static void main(String[] args) {
		double d = Math.abs(-9.9);
		System.out.println(d);
		d = Math.sin(Math.PI);
		System.out.println(d);

		// 浮点数的运算有精度问题,解决:BigDecimal类
		System.out.println(0.09 + 0.01);// 0.09999999999999999
		System.out.println(1.0 - 0.33);// 0.6699999999999999
		System.out.println(0.0023 * 100);// 0.22999999999999998
		System.out.println(12.3 / 100);// 0.12300000000000001
		BigDecimal d1 = new BigDecimal("0.09");// 注意使用String类似构造,若使用double等构造仍然不精确
		BigDecimal d2 = new BigDecimal("0.01");
		System.out.println(d1.add(d2));// 0.10
		d1 = new BigDecimal("1.0");
		d2 = new BigDecimal("0.33");
		System.out.println(d1.subtract(d2));// 0.67
		d1 = new BigDecimal("0.0023");
		d2 = new BigDecimal("100");
		System.out.println(d1.multiply(d2));// 0.2300
		d1 = new BigDecimal("12.3");
		d2 = new BigDecimal("100");
		System.out.println(d1.divide(d2));// 0.123

		// BigInteger 用于解决超出long最大值的运算的
		long num = Long.MAX_VALUE;
		System.out.println(num);// 9223372036854775807
		System.out.println(num + 1);// -9223372036854775808
		System.out.println(BigInteger.valueOf(num).add(BigInteger.valueOf(1)));// 9223372036854775808

		// static double random() 返回值为 double值为正号,大于等于 0.0 ,小于 1.0 。 [0,1)
		// 打印 [0, 100)的随机数
		for (int i = 0; i < 10; ++i) {
			int randomNum = (int) (Math.random() * 100);
			System.out.println(randomNum);
		}
		System.out.println("-------------------------------");
		// static long round(double a) 返回参数中最接近的 long ,其中 long四舍五入为正无穷大。 
		long n = Math.round(4.5);
		System.out.println(n);//5
	}
}

ThreadlocalRandom 和 Random

Random类专门用于生成一个伪随机数,它有两个构造器:一个构造器使用默认的种子(以当前时间作为种子), 另一个构造器需要程序员显式传入一个long型整数的种子。

ThreadlocalRandom类是Java7新增的一个类,它是 Random的增强版。在并发访问的环境下,使用 Threadlocalrandom来代替 Random可以减少多线程资源竟争,最终保证系统具有较好的性能。

例子:

		Random random = new Random();
		boolean b = random.nextBoolean();
		System.out.println(b);
		byte[] buffer = new byte[16];
		random.nextBytes(buffer);
		System.out.println(Arrays.toString(buffer));
		//生成 0~1.0 之间的伪随机数double
		double d = random.nextDouble();
		System.out.println(d);
		//生成 0~1.0 之间的伪随机数float
		float f = random.nextFloat();
		System.out.println(f);
		//生成一个标准正态分布的随机数
		System.out.println(random.nextGaussian());
		//生成一个int取值范围的随机整数
		System.out.println(random.nextInt());
		//生成一个[0,26)的随机整数
		System.out.println(random.nextInt(26));
		//生成一个long取值范围的随机整数
		System.out.println(random.nextLong());

BigDecimal

double d = 0.1 + 0.05;
System.out.println(d);//0.15000000000000002
//为了解决浮点数精度问题
//使用BigDecimal (尽量使用String去构造)
BigDecimal f1 = new BigDecimal(0.02);
BigDecimal f2 = BigDecimal.valueOf(0.02);
BigDecimal f3 = new BigDecimal("0.02");
System.out.println(f1);//0.0200000000000000004163336342344337026588618755340576171875
System.out.println(f2);//0.02
System.out.println(f3);//0.02
BigDecimal f4 = new BigDecimal("0.04");
System.out.println(f4.add(f2));//0.06
System.out.println(f4.subtract(f2));//0.02
System.out.println(f4.multiply(f2));//0.0008
System.out.println(f4.divide(f2));//2

Date

是指java.util.Date 而不是 java.sql.Date

  • Date( ):生成一个代表当前日期时间的Date对象。该构造器在底层调用 System.currentTimeMillis获得long整数作为日期参数。
  • Date( long date);根据指定的long型整数来生成一个Date对象。该构造器的参数表示创建的Date对象和GMT1970年1月1日00:00:00之间的时间差,以毫秒作为计时单位

Date构造器相同的是,Date对象的大部分方法也 Deprecated了,剩下为数不多的几个方法

  • boolean after( Date when):测试该日期是否在指定日期when之后
  • boolean before( Date when):测试该日期是否在指定日期when之前。
  • int compareto( Date anotherdate):比较两个日期的大小,后面的时间大于前面的时间时返回-1,否则返回1。
  • boolean equals( Object obj):当两个时间表示同一时刻时返回true
  • long getTime():返回该时间对应的long型整数,即从GMT1970-01-01 00:00:00 到该Date对象之间的时间差,以毫秒作为计时单位。
  • void setTime (long time):设置该Date对象的时间。

下面程序示范了Date类的用法

Date date = new Date();
System.out.println(date);//Sat Nov 28 21:28:50 CST 2020
System.out.println(date.toLocaleString());//2020-11-28 21:28:50
Date d2 = new Date(System.currentTimeMillis()+1000);//1000ms之后的时间
System.out.println(d2.toLocaleString());//2020-11-28 21:28:51
System.out.println(date.compareTo(d2));//-1
System.out.println(date.before(d2));//true

Date <–>String

public class StringUtil {
	private StringUtil() {}
	/**
	 * 判断字符串是否为null或空白符或空字符串
	 * @param str 待判断的字符串
	 * @return boolean
	 */
	public static boolean IsNullOrBlank(String str) {
		if(str == null || "".equals(str.trim()) )
			return true;
		return false;
	}
}
public class DateUtil {
	private static String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
	private DateUtil() {}
	// 格式化操作:将 Date --> String
	public static String date2string(java.util.Date date)
	{
		return date2string(date, null);
	}
	// 格式化操作:将 Date --> String
	public static String date2string(java.util.Date date, String strPattern)
	{
		if(StringUtil.IsNullOrBlank(strPattern))
		{
			strPattern = DEFAULT_DATE_PATTERN;
		}
		return new SimpleDateFormat(strPattern).format(date);
	}
		
	// 解析操作:将字符串 String 转换为 Date
	public static java.util.Date string2date(String strDateTime) throws ParseException
	{
		return string2date(strDateTime, null);
	}
	// 解析操作:将字符串 String 转换为 Date
	public static java.util.Date string2date(String strDateTime, String strPattern) throws ParseException
	{
		if(StringUtil.IsNullOrBlank(strPattern))
			strPattern = DEFAULT_DATE_PATTERN;
		SimpleDateFormat sdf = new SimpleDateFormat(strPattern);
		java.util.Date date = sdf.parse(strDateTime);
		return date;
	}
	
	// 设置Date的时分秒都为0
	public static void clearHourMinuteSecond(java.util.Date date)
	{
		if(null == date)
			return;
		date.setHours(0);
		date.setMinutes(0);
		date.setSeconds(0);		
	}
	
	public static void main(String[] args) throws ParseException {
		System.out.println(date2string(new java.util.Date(),"		 "));
		System.out.println(DateUtil.string2date("2020-12-21 12:12:12",null));
	}
}

Calendar

import java.util.Calendar;

public class CalendarDemo {
	public static void main(String[] args) {
		// 由于Date类中的有些方法过时了,但还能用,官方建议使用Calendar类(比Date强大)
		Calendar cal = Calendar.getInstance();//获取当前日期和时间
		int year = cal.get(Calendar.YEAR);
		int month = cal.get(Calendar.MONTH) + 1;//注意:0~11表示1~12月,故+1
		int day = cal.get(Calendar.DAY_OF_MONTH);
		int hour = cal.get(Calendar.HOUR_OF_DAY);
		int minute = cal.get(Calendar.MINUTE);
		int second = cal.get(Calendar.SECOND);
		int milliSecond = cal.get(Calendar.MILLISECOND);//10:04:15.250 PM the MILLISECOND is 250. 
		//从 1970-01-01 00:00:00 UTC 到现在的毫秒数
		long mil = System.currentTimeMillis();
		long l = new java.util.Date().getTime();
		
		String str = String.format("%d-%02d-%02d %02d:%02d:%02d.%d", 
				year, month, day, hour, minute, second, milliSecond);
		System.out.println(str);
		System.out.println("-----------------------");
		// Calendar <--> Date
		java.util.Date date = cal.getTime();
		cal.setTime(date);
		// void add(int field, int amount) 根据日历的规则,将指定的时间量添加或减去给定的日历字段。 
		cal.add(Calendar.DAY_OF_MONTH, 100);//100天后的日期
		System.out.println(cal.getTime().toLocaleString());
	}
}

import java.util.Calendar;

public class CalendarDemo2 {
	public static void main(String[] args) {
		//查询:最近一周
		java.util.Date date = new java.util.Date();
		DateUtil.clearHourMinuteSecond(date);
		System.out.println(date);
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.DAY_OF_MONTH, 1);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		java.util.Date endDate = cal.getTime();
		cal.add(Calendar.DAY_OF_MONTH, -7);
		java.util.Date beginDate = cal.getTime();
		System.out.println(endDate);
		System.out.println(cal.getTime());
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在现有省、市港口信息化系统进行有效整合基础上,借鉴新 一代的感知-传输-应用技术体系,实现对码头、船舶、货物、重 大危险源、危险货物装卸过程、航管航运等管理要素的全面感知、 有效传输和按需定制服务,为行政管理人员和相关单位及人员提 供高效的管理辅助,并为公众提供便捷、实时的水运信息服务。 建立信息整合、交换和共享机制,建立健全信息化管理支撑 体系,以及相关标准规范和安全保障体系;按照“绿色循环低碳” 交通的要求,搭建高效、弹性、高可扩展性的基于虚拟技术的信 息基础设施,支撑信息平台低成本运行,实现电子政务建设和服务模式的转变。 实现以感知港口、感知船舶、感知货物为手段,以港航智能 分析、科学决策、高效服务为目的和核心理念,构建“智慧港口”的发展体系。 结合“智慧港口”相关业务工作特点及信息化现状的实际情况,本项目具体建设目标为: 一张图(即GIS 地理信息服务平台) 在建设岸线、港口、港区、码头、泊位等港口主要基础资源图层上,建设GIS 地理信息服务平台,在此基础上依次接入和叠加规划建设、经营、安全、航管等相关业务应用专题数据,并叠 加动态数据,如 AIS/GPS/移动平台数据,逐步建成航运管理处 "一张图"。系统支持扩展框架,方便未来更多应用资源的逐步整合。 现场执法监管系统 基于港口(航管)执法基地建设规划,依托统一的执法区域 管理和数字化监控平台,通过加强对辖区内的监控,结合移动平 台,形成完整的多维路径和信息追踪,真正做到问题能发现、事态能控制、突发问题能解决。 运行监测和辅助决策系统 对区域港口与航运业务日常所需填报及监测的数据经过科 学归纳及分析,采用统一平台,消除重复的填报数据,进行企业 输入和自动录入,并进行系统智能判断,避免填入错误的数据, 输入的数据经过智能组合,自动生成各业务部门所需的数据报 表,包括字段、格式,都可以根据需要进行定制,同时满足扩展 性需要,当有新的业务监测数据表需要产生时,系统将分析新的 需求,将所需字段融合进入日常监测和决策辅助平台的统一平台,并生成新的所需业务数据监测及决策表。 综合指挥调度系统 建设以港航应急指挥心为枢纽,以各级管理部门和经营港 口企业为节点,快速调度、信息共享的通信网络,满足应急处置所需要的信息采集、指挥调度和过程监控等通信保障任务。 设计思路 根据项目的建设目标和“智慧港口”信息化平台的总体框架、 设计思路、建设内容及保障措施,围绕业务协同、信息共享,充 分考虑各航运(港政)管理处内部管理的需求,平台采用“全面 整合、重点补充、突出共享、逐步完善”策略,加强重点区域或 运输通道交通基础设施、运载装备、运行环境的监测监控,完善 运行协调、应急处置通信手段,促进跨区域、跨部门信息共享和业务协同。 以“统筹协调、综合监管”为目标,以提供综合、动态、实 时、准确、实用的安全畅通和应急数据共享为核心,围绕“保畅通、抓安全、促应急"等实际需求来建设智慧港口信息化平台。 系统充分整合和利用航运管理处现有相关信息资源,以地理 信息技术、网络视频技术、互联网技术、移动通信技术、云计算 技术为支撑,结合航运管理处专网与行业数据交换平台,构建航 运管理处与各部门之间智慧、畅通、安全、高效、绿色低碳的智 慧港口信息化平台。 系统充分考虑航运管理处安全法规及安全职责今后的变化 与发展趋势,应用目前主流的、成熟的应用技术,内联外引,优势互补,使系统建设具备良好的开放性、扩展性、可维护性。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值