Java学习 进制转换 字符串

目录

进制转换

二进制转十进制(N进制转十进制)

十进制转二进制(十进制转N进制)

N进制转M进制

字符串

检测字符串是否相等

String API  

构建字符串

参考文献


进制转换

二进制转十进制(N进制转十进制)

以二进制为例

101001110B=1*2^8+0*2^7+1*2^6+0*2^5+0*2^4+1*2^3+1*2^2+1*2^1+0*2^0

对于N进制转十进制的方法是:按权相加法。即把N进制数先写成加权系数展开式,然后再按十进制的加法规则求和,得到对应十进制数。

例如:对于7进制数 645234转换为十进制过程如下

十进制转二进制(十进制转N进制)

模N取余法:(直到商为0)

以二进制为例(模2取余法)

整数部分为从下往上101011001(小数部分为从上往下)

N进制转M进制

(N进制先转十进制,十进制再转M进制)

字符串

字符串用双引号,字符用单引号。

String 类的 substring 方法可以从一个较大的字符串提取出一个子串。

substring 的工作方式有一个优点:容易计算子串的长度。字符串 s.substring(a, b) 的长度

为 b-a。

public class Test{
	public static void main(String[] aaa){
	String str = "大家好,我是李明,我来自河北省张家口市";
	char[] arr1 = {'大','家','好' };
	String str2 = "你们也很好";
	String str3 = "我们都很好";
	String s1 = str.substring(3, 6); //[3,6)  3.  4. 5(前闭后开)截取数组中第4到第六个字符
	System.out.println(s1);
	}

}

不可变字符串是指不可以在原地址上修改,(数组在内存中物理地址是连续的),如果想要修改,就必须申请新的空间

对于基本类型来说 == 比较的是值,但对于引用类型来说,== 比较的是内存地址是否相等

如果重写equals,一定要重写hashcode()方法。原因是需要配合hashmap使用

检测字符串是否相等

检测字符串值是否相等需要用 a .equals(b) 检测两个字符串是否相等。

一定不要使用 == 运算符检测两个字符串是否相等! 这个运算符只能够确定两个字串

是否放置在同一个位置上。当然, 如果字符串放置在同一个位置上, 它们必然相等。但是,

完全有可能将内容相同的多个字符串的拷贝放置在不同的位置上。

(1)检测是否相等

可以使用 equals 方法检测两个字符串是否相等。对于表达式:

s.equals(t)

如果字符串 s 与字符串 t 相等, 则返回 true ; 否则, 返回 false。

(2)忽略大小写的检测

要想检测两个字符串是否相等,而不区分大小写, 可以使用

equalsIgnoreCase 方法。

"Hello".equalsIgnoreCase("hello")

对于引用类型来说,变量名和变量位置(句柄和值 等号左边叫句柄,右边叫值)一定不在一起(即物理地址不相邻),引用类型的值不断发生变化,大小不固定,所以不能事先给他分配空间。(需要动态分配)。基本类型的值是固定的,可以事先分配。

不可变字符串有一个优点:编译器可以让字符串共享。(采用字符串)

字符串常量池:节省空间,引用相同字符串对应同一个

空串和null串:

空串是一个 Java 对象, 有自己的串长度( 0 ) 和内容(空)

String 变量还可以存放一个特殊的值, 名为 null, 这表示目前没有任何对象与该变量关联

码点和代码单元:

Java 字符串由 char 值序列组成。 char 数据类型是一个采用 UTF-16 编码表示 Unicode 码点的代码单元。大多数的常用 Unicode 字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元表示。

String API  

API 给了函数名 规定返回的类型  入参,以及 说明

(都需要背诵)

public class Test{
	public static void main(String[] aaa){
	String str = "大家好,大家最棒";
	char x = str.charAt(6);//用的很多(获取指定位置字符)
	//调用 s.charAt(n) 将返回位置 n 的代码单元,n 介于 0 ~ s.length()-l 间。

	int x2 = str.codePointAt(0);//获取该点的编码值
    System.out.println(x);
	}

}

char x = str.charAt(6);//用的很多(获取指定位置字符)

String str2 = str.replace("=" , "#") ; //替换。 表示将str中 = 全部替换为 #

int y = str.length(); //计算字符串的长度

String[] arr = str.split("="); //根据 = 将字符串切割。

//(以下为例子)
String str = "大家=好,大=家=最=棒";
	char x = str.charAt(6);
	int x2 = str.codePointAt(0);	

	String str2 = str.replace("=" , "#");
	
	int y = str.length();

	String[] arr = str.split("=");

	boolean b = str.startsWith("家=");
	
	boolean c = str.equals(str2);

	int d = str.indexOf("家=");

	int e = str.compareTo(str);

 

 构建字符串

字符串拼接 StringBuilder StringBuffer

采用字符串连接的方式构建字符串效率比较低。每次连接字符串, 都会构建一个新的 String 对象,既耗时, 又浪费空间。使用 StringBuildei•类就可以避免这个问题的发生。

字符串拼接比这两个慢很多。StringBuffer内部原理同StringBuilder一样是,多线程下的安全版本,因为加锁了,所以比StringBuilder稍微慢一丢丢。

三者都可以返回字符串

long start = System.currentTimeMillis();
	String a = "";
	StringBuilder a2 = new StringBuilder();
	for(int i=0;i<10000;i++){
	  // a+= i;
	   a2.append(i+"");
	}
	long end = System.currentTimeMillis();
	System.out.println("所消耗时间为:"+(end - start));

以上是StringBuilder和字符串连接构建字符串的步骤,分别运行出来之后可以比较出来当i的值很大的时候,StringBuilder比字符串连接消耗的时间大大减少。

参考文献

java核心卷第十版

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值