java:字符串(下)

判断字符串是否相等

对字符串对象进行比较不能简单地比较运算符“====”,因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同。

即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符仍然会返回false。

equals()方法和equalsIgnoreCase方法

如果两个字符串具有相同的字符和长度,则使用equals方法()进行比较时,返回ture

使用equals()方法对字符串进行比较时是区分大小写的,而使用equalsIgnoreCase()方法是忽略了大小写的情况下比较两个字符串是否相等,返回结果仍未boolean类型。

我们用一组代码来进行比较

public class Opinion {

public static void main(String[] args) {
  String s1=new String("abc");
  String s2=new String("ABC");
  boolean b=s1.equals(s2);//定义b为布尔类型s1和s2是否相同
        boolean b2=s1.equalsIgnoreCase(s2);//定义b2为布尔类型s1和s2是否相等
        System.out.println(s1+"\t"+"equals"+"\t"+s2+"\t"+b);//打印
        System.out.println(s1+ "\t"+"equalslgnoreCase"+"\t" +s2+":"+b2);
 }

}

执行结果:

abc equals ABC false
abc equalslgnoreCase ABC:true

按字典顺序比较两个字符串

CompareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的unicode值,按字典顺序将此String对象表示的字符序列与参数字符串所表示的字符串序列进行比较如果按字典顺序Sting对象表示的字符串序列进行比较。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此String 对象位于参数数字字符串之后,则比价结果为一个正整数了;如果这两个字符串相等则结果为0

使用equals()方法比较,进行输出

public class Wordbook {

public static void main(String[] args) {
  String str=new String("b");
  String str2=new String("a");
  String str3=new String("c");
  System.out.println(str+"compareTO"+str2+"."+str.compareTo(str2));
        System.out.println(str+"compareTo"+str3+"."+str.compareTo(str3));
 }

}

执行结果为:

bcompareTOa.1
bcompareToc.-1

字母大小写转换:字符串的tolowerCase()方法课将字符串中的所有字符从大写字母改为小写字母,而toUpperCase()方法可将字符串中的小写字母改为大写字母。

toLowerCase()是转换成小写,toUpperCase()是转换成大写

public class UpAndLower {

public static void main(String[] args) {
  String str=new String("abcDEF");//str定义新的字符串类型
  String newstr=str.toLowerCase();//将str中的abcdef转换为小写
        String newstr2=str.toUpperCase();//将str中的abcde转换为大写
        System.out.println(newstr);//打印newstr
        System.out.println(newstr2);//打印newstr2
 }

}

执行结果为:

abcdef
ABCDEF

字符串分割:使用split()方法可以是字符串按指定的分割字符或字符串对内容进行分割,并将分割后的结果存放在字符串数组中。

public class Division {

public static void main(String[] args) {
  String str="192.168.1.1";
  String[] firstArray=str.split("\\.");
        String[] secondArray=str.split("\\.",2);
        System.out.println("str的原值为:["+str+"]");
        System.out.println("全部分割结果为:");
        for(String a:firstArray){
         System.out.print("["+a+"]");
        }
        System.out.println();
        System.out.println("分割两次结果为");
        for(String a:secondArray){
         System.out.print("["+a+"]");
        }
        System.out.println();
 }
}

执行结果为:

str的原值为:[192.168.1.1]
全部分割结果为:
[192][168][1][1]
分割两次结果为
[192][168.1.1]

格式化字符串

String类静态forma格式化的字符串方法用于创建格式化的字符串

format()方法有两种重载形式

public class All_所有时间 {
   public static void main(String[] args) {
 Date date=new Date();
 String year=String.format("%tY", date);
 String month=String.format("%tm",date);
 String day=String.format("%td", date);
 String a=String.format("%ta", date);
 String hour=String.format("%tH", date);
 String minute=String.format("%tM", date);
 String second=String.format("%tS", date);
 System.out.println(year+"/"+month+"/"+day+"  "+a+"   "+hour+":"+minute+":"+second);
}
}

执行结果为:2018/07/05  星期四   15:00:17

使用正则表达式:

正则表达式用于判断语句居多,用来检查某一字符串时候满足某一格式

用判断E-mai地址合法的是那几个

public class Judge {

public static void main(String[] args) {
  //定义要匹配的E-mail地址的正则表达式
  String regex="\\[email protected]\\w+(\\.\\w{2,3})*\\.\\w{2,3}";//符合这个正则表达式的为E-mail地址
  String str1="[email protected]";
  String str2="[email protected]";
  String str3="[email protected]";
        if(str1.matches(regex)){
         System.out.println(str1+"是一个合法的E-mail地址格式");
        }
        if(str2.matches(regex)){
         System.out.println(str2+"是一个合法的E-mail地址格式");
        }
        if(str3.matches(regex)){
         System.out.println(str3+"是一个合法的E-mail地址格式");
        }
 }
}

执行结果为:[email protected]是一个合法的E-mail地址格式
[email protected]是一个合法的E-mail地址格式

字符串生成器:

创建成功的字符串,长度为固定的,内容不能被改变和编译。

下面就来验证一下字符串的长度和其字符串的工作效率

public class Jreque {

public static void main(String[] args) {
  String str="";
  //定义对字符串执行操作的起始时间
  long startTime=System.currentTimeMillis();
  for(int i=0;i<10000;i++){
   str=str+i;
  }
  long endTime=System.currentTimeMillis();
  long time=endTime-startTime;
  System.out.println("String消耗时间"+time);
  StringBuilder builder=new StringBuilder("");
  startTime=System.currentTimeMillis();
  for(int j=0; j<10000;j++){
   builder.append(j);
  }
  endTime=System.currentTimeMillis();
  time=endTime-startTime;
  System.out.println("StringBuilder 消耗时间:"+time);
 }

}

执行结果为:

String消耗时间273
StringBuilder 消耗时间:1

原文地址:https://www.cnblogs.com/wzhdcyy/p/9268401.html

时间: 2024-10-21 07:33:38

java:字符串(下)的相关文章

Java字符串学习笔记

通过看jdk源码发现Java字符串中有如下关系: 接口中的方法默认都是抽象的可以写也可以不写. public interface CharSequence { int length(); char charAt(int index); CharSequence subSequence(int start, int end); public String toString(); } 其他的都是该接口的实现类且是最终类,不能被继承. public final class String impleme

深入Java字符串

深入Java字符串 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 一.从根本上认识java.lang.String类和String池 首先,我建议先看看String类的源码实现,这是从本质上认识String类的根本出发点.从中可以看到: 1.String类是final的,不可被继承.public final class String. 2.String类是的本质是字符数组char[], 并且其值不可改变.pr

优化java字符串连接与循环

最近在看公司项目的时候,发现前辈们写的代码很少用到字符串通过"+"号拼接,通过看源码发现package java.lang下有StringBuilder这么个类 StringBuilder用起来相当的方便,特别是在拼接SQL的时候看的一目了然. 网上也有说:消除字符串连接,在程序中优先考虑使用StringBuffer或者StringBuilder代替String.一个字符串相当于一个匿名的String对象,如果在程序中拼接两个字符串那么会在内存中定义三个字符串空间.而StringBuf

java 字符串内存分配的分析与总结

经常在网上各大版块都能看到对于java字符串运行时内存分配的探讨,形如:String a = "123",String b = new String("123"),这两种形式的字符串是存放在什么地方的呢,其实这两种形式的字符串字面值"123"本身在运行时既不是存放在栈上,也不是存放在堆上,他们是存放在方法区中的某个常量区,并且对于相同的字符串字面值在内存中只保留一份.下面我们将以实例来分析. 1.==运算符作用在两个字符串引用比较的两个案例: p

关于java字符串编译优化问题

情景一:不好的字符串拼接习惯    起因是这样的:一个大牛在写了一篇关于java字符串优化问题的讲解,他提到:不要使用strObj+otherValue的方法将otherValue转换为字符串形式,因为底层操作会让你吓一跳的.那么底层的实质是怎么样的呢?他的意思是这样的: 比如:    String s = "I have"; int  total = 12; Dog dog = new Dog();     //假设Dog类重写了toString方法 String msg = s +

【java解惑】java字符串替换方法使用

    如下代码: public class Example020 { public static void main(String[] args) { String separator = File.separator; String clazzName = Example020.class.getName(); String rs1 = clazzName.replace(".", separator); // 方法1 String rs2 = clazzName.replaceA

Java 字符串生成器(StringBuilder)

删除服务一般有两个办法: 办法一: 用sc.exe这个Windows命令            开始--运行--cmd.exe,然后输入sc就可以看到了.使用办法很简单: sc delete"服务名"      (如果服务名中间有空格,就需要前后加引号) 如针对上面的: sc delete ConnectMON 办法二:直接进行注册表编辑 打开注册表编辑器,找到下面的键值: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 一般服

004 Java字符串的几个特性

在本系列教材的上一篇(003 Java字符串)中,对Java语言中String类的一些基本情况和整体架构进行了讲解和分析,相信大家已经很好地掌握了.本篇教程主要是补充一些String类的重要特性,帮助大家避免掉使用String过程中的一些陷阱. 首先,补充一个在JDK中使用非常频繁的概念:不可变类.所谓的不可变类是指该类的对象在生成以后就不会被改变了,关于不可变类的优点.缺点,特别是在Java并发编程时的优势,此处暂时略过不讲.那么如何定义一个不可变类呢?如果你有仔细观察String类的源码,你

Java 环境下使用 AES 加密的特殊问题处理

在 Java 环境下使用 AES 加密,在密钥长度和字节填充方面有一些比较特殊的处理. 1. 密钥长度问题 默认 Java 中仅支持 128 位密钥,当使用 256 位密钥的时候,会报告密钥长度错误 Invalid AES key length 你需要下载一个支持更长密钥的包.这个包叫做 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6,可以从这里下载,下载地址:http://www.

java 字符串函数

string1.equals(string2) 比较字符串 substring()它有两种形式,第一种是:String substring(int startIndex)第二种是:String substring(int startIndex,int endIndex) concat() 连接两个字符串 replace() 替换它有两种形式,第一种形式用一个字符在调用字符串中所有出现某个字符的地方进行替换,形式如下:String replace(char original,char replac