文档章节

String字符串相关---本文的正确性有待您验证。

Romanceling
 Romanceling
发布于 2016/04/12 23:57
字数 1709
阅读 32
收藏 0

/**
 * String是不变对象,即:
 * 字符串对象创建后,内容不可改变,一旦想改变内容会创建新对象。
 * 创建字符串对象推荐使用字面量的形式,这样做会重用对象,减小内存开销。
 * @author  Administrator
 */
public class StringTest1 {
    public static void main(String[] args) {
        String str1 = "helloworld";
        String str2 = "helloworld";
        String str4 = new String("helloworld");
        /*
         * 编译器在编译程序时,若发现一个计算表达式的操作符两边都是字面量时,
         * 会直接将结果计算出来并编译到class文件中, 所以JVM在读取class文件时,
         * 下面的代码变为:String str5 = "helloworld";
         */
        String str5 = "hello"+"world";    
        String info = "hello";
        String str6 = info + "world";

        System.out.println(str1==str2);//true
        System.out.println(str1==str4);//false
        System.out.println(str1==str5);//true
        System.out.println(str1==str6);//false        
    }
}
/**
 * 操作字符串的一些方法
 * @author  Administrator
 */
public class StringTest2 {
    public static void main(String[] args) {
        String str = "thinking in java";       
        /**
         * int indexOf(String str)
         * 检查给定字符串在当前字符串中的位置若当前字符串不包含给定内容,返回值为-1.
         */
        int index = str.indexOf("in");
        System.out.println(index);//2
        
        /*
         * 重载方法,可以从指定下标处开始查找第一次出现指定字符的位置。
         */
        index = str.indexOf("in", 3);
        System.out.println(index);//5
    
        /*
         * int lastIndexOf(String str)
         * 找到当前字符串中最后一次出现给定字符串的位置
         */
        int last = str.lastIndexOf("in");
        System.out.println(last);//9
        /**
          * String substring(int start,int end)
         * 截取字符串
          * 从当前字符串的start处开始,连续截取到end处。
          * 需要注意的是,截取的字符串不包含end处对应的字符。
          * 在java api中,通常使用2个数字表示范围时,都是"含头不含尾的"。
         */
        String str = "www.oracle.com";
        //截取"oracle"
        String sub = str.substring(4,10);
        System.out.println(sub);
        /*
         * 重载方法只传入一个参数,就是从该位置处开始,连续截取到字符串末尾
         */
        sub = str.substring(4);
        System.out.println(sub);
        
        /*
         * 通过Scanner获取用户输入的一个地址,如:
         * www.tedu.com www.baidu.com
         * http://www.sina.com
         * http://www.xxx.com.cn
         * 经过处理,输出其中的域名,如 tedu baidu sina xxx
         */
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个地址:");
        String loc = scanner.nextLine();
        //第一个"."之后第一个字符的位置
        int start = loc.indexOf(".")+1;
        //第二个"."的位置
        int end = loc.indexOf(".",start);
        sub = loc.substring(start,end);
        System.out.println("域名:"+sub);
        /**
          * String trim()
          * 去除当前字符串中两边的空白字符
          */
        String str = "  java        ";
        String trim = str.trim();
        System.out.println(trim);//java
        /**
         * char charAt(int index)
          * 获取当前字符串中指定位置上的字符
          */
        String str = "thinking in java";        
        char c = str.charAt(9);
        System.out.println(c);//i
        /**
         * boolean startsWith(String str)
          * 判断当前字符串是否是以给定的字符串开始的
          *
         * boolean endsWith(String str)
          * 判断当前字符串是否是以给定的字符串结尾的
          */
          boolean starts = str.startsWith("think");
        System.out.println("starts:"+starts);//true
        
        boolean ends = str.endsWith("ava");
        System.out.println("ends:"+ends);//true
        /**
         * String toUpperCase()
         * 将当前字符串中的英文字母转换为全大写
         *
         * String toLowerCase()
         * 将当前字符串中的英文部分转换为全小写
        */
        String str = "我爱Java";
        
        String upper = str.toUpperCase();
        System.out.println(upper);//我爱JAVA
        
        String lower = str.toLowerCase();
        System.out.println(lower);//我爱java
        /**
         * String提供了若干个valueOf的重载方法,这些方法都是静态的,
         * 作用是将java中其他类型转换为字符串。常用的是将基本类型转换为字符串。
        */
        int i = 123;
        //"123"
        String iStr = String.valueOf(i);
        System.out.println(iStr);
        iStr = 123+"";//简便的方法
        
        String dStr = String.valueOf(123.123);
        System.out.println(dStr);
                
    }
}
/**
 * java.lang.StringBuidler
 * 使用该类来编辑字符串内容。
 * 由于使用String频繁修改字符串对系统开销巨大,所以频繁修改字符串时,
 * 应当时用StringBuilder来解决
 * StringBuilder提供了便于编辑字符串相关方法
 * append,delete,replace,insert
 * 增,删,改,插
 * @author  Administrator
 *
 */
public class StringBuilderTest{
    public static void main(String[] args) {
        String str = "努力学习java";
        //将字符串转化为StringBuilder来修改内容
        StringBuffer builder = new StringBuffer(str);
        
        //将StringBuilder中的字符串获取
        str = builder.toString();
        System.out.println(str);
        
        /*
         * 努力学习java,为了找个好工作!
         * StringBuilder append(String str)
         * 将给定的字符串追加到当前字符串末尾
         */
        builder.append(",为了找个好工作!");
        System.out.println(builder.toString());
        
        /*
         * 努力学习java,为了找个好工作!修改为:
         * 努力学习java,就是为了改变世界!
         *
         * StringBuilder replace(int start,int end,Strin str)
         * 用给定字符串替换指定范围内的原字符串。
         */
        builder.replace(9, 16, "就是为了改变世界");
        System.out.println(builder.toString());
        
        /*
         * 努力学习java,就是为了改变世界!
         * 修改为: ,就是为了改变世界!
         * StringBuilder delete(int start,int end)
         * 删除当前字符串指定范围内的字符
         */
        builder.delete(0, 8);
        System.out.println(builder.toString());
        
        /*
         * ,就是为了改变世界!
         * 修改为:活着,就是为了改变世界!
         *
         * StringBuilder insert(int index,String str)
         * 将给定的字符串插入到指定位置
         */
        builder.insert(0, "活着");
        System.out.println(builder.toString());
        
        //翻转字符串
        builder.reverse();
        System.out.println(builder.toString());

        /**
         * StringBuilder修改字符串效率高
          */
        String str = "a";
        StringBuilder builder = new StringBuilder(str);
        for(int i=0;i<10000000;i++){
            builder.append("a");
        }
        System.out.println("完毕!");        
    }
}

/**
 * 测试Point类重写Object的相关方法
 * @author Administrator
 */
public class TestPoint {
    public static void main(String[] args) {
        Point p = new Point(1,2);
        /*
         * Object中定义的toString方法返回的是对象的句柄(对象的地址)
         * 格式为:类名@地址
         */
        String str = p.toString();
        System.out.println(str);    
        Point p1 = new Point(1,2);        
        System.out.println(p==p1);
        /*
         * Object提供的equals方法就是使用* "=="进行比较的,所以并无实际意义。
         * 当我们需要使用一个类的equals方法时应当重写它。
         * java API提供的类基本都实现了该方法。
         * 对于引用类型变量而言:
         * "==":值比较,在这里就是地址的比较,所以两个引用类型变量指向同一个  
         *      对象时才为true,所以比较的是 是否为"同一个"
         *
         * "equals":内容比较,比较的是两个对象的内容是否一样,
         *      所以比较的是"像不像"     
         */
        System.out.println(p.equals(p1));    
    }
}
/**
 * 使用该类测试Object中的方法:
 * String toString()
 * boolean equals(Object o)
 * @author Administrator
 *
 */
public class Point {
    private int x;
    private int y;
    
    public Point(int x,int y){
        this.x = x;
        this.y = y;
    }
    
    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }
    /**
     * 重写toString方法
     * 当我们调用一个类的toString方法时,就应当重写该方法,
     * 因为Object提供的toString方法返回的句柄没有什么实际意义。
     * toString返回的字符串应当包含当前类的属性信息。
     * 具体格式可以根据实际开发需求而定。
     * 需要看到那些属性,就将那些属性拼接到字符串中。
     */
    public String toString(){
        return "("+x+","+y+")";
    }
    /**
     * 重写equals方法
     * 目的是比较两个对象的内容是否一致,并不是说所有属性都一样,
     * 才叫内容一致,这个要结合将来实际开发需求。
     */
    public boolean equals(Object obj){
        if(obj == null){
            return false;
        }
        if(obj == this){
            return true;
        }
        if(obj instanceof Point){
            Point p = (Point)obj;
            return this.x==p.x&&this.y==p.y;
        }
        return false;
    }      
}

© 著作权归作者所有

Romanceling
粉丝 14
博文 166
码字总数 91809
作品 0
无锡
程序员
私信 提问
微信公众号开发01(node版本)

记录下微信公众开发的一些坑,主要是接口配置和jsapi应用 测试号接口信息配置 具体说明官方文档 首选需要一个服务器地址,建议用ngrok映射 token相当于自己的密令,随便加 配置参数 你每次点...

debt
2018/01/03
0
0
Linux系统中软件简单License的实现

概述 目前,很多商用应用系统是运行在Linux系统之上的,为了维护开发者利益,有必要为软件添加license功能,防止软件被盗用和挪用。本文探讨如何在Linux软件中添加license功能,用到的算法是...

lichao19881026
2016/02/26
502
0
利用位运算验证数独正确性

利用位运算验证数独正确性 始终2017-12-173 阅读 SudokuC++ 数独 是一种益智解谜游戏。初始状态,在 $9times 9$ 的盘面上,零星分布着一些 1 – 9 的整数。规则要求玩家在初始状态的基础上,...

始终
2017/12/17
0
0
Java正则表达式工具类

java的正则表达式用起来感觉不太顺手,所以封装一下,个人感觉好用多了。(一句代码就能解决什么的最喜欢了~) 主要功能有: boolean find() 是否能匹配到至少一个 boolean match() 匹配整个...

linin630
2016/09/13
160
0
文件头信息中用来判断文件类型的16进制串

从网上找的 正确性有待验证... Java code 1、从Ultra-edit-32中提取出来的 JPEG (jpg),文件头:FFD8FFPNG (png),文件头:89504E47GIF (gif),文件头:47494638TIFF (tif),文件头:49492...

大鹏
2010/06/21
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt程序打包发布方法(使用官方提供的windeployqt工具)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/toTheUnknown/article/details/81748179 如果使用到了Qt ...

shzwork
20分钟前
2
0
MainThreadSupport

MainThreadSupport EventBus 3.0 中的代码片段. org.greenrobot.eventbus.MainThreadSupport 定义一个接口,并给出默认实现类. 调用者可以在EventBus的构建者中替换该实现. public interface ...

马湖村第九后羿
41分钟前
3
0
指定要使用的形状来代替文字的显示

控制手机键盘弹出的功能只能在ios上实现,安卓是实现不了的,所以安卓只能使用type类型来控制键盘类型,例如你要弹出数字键盘就使用type="number",如果要弹出电话键盘就使用type="tel",但这...

前端老手
51分钟前
6
0
总结:Raft协议

一、Raft协议是什么? 分布式一致性算法。即解决分布式系统中各个副本数据一致性问题。 二、Raft的日志广播过程 发送日志到所有Followers(Raft中将非Leader节点称为Follower)。 Followers收...

浮躁的码农
58分钟前
7
0
Flask-admin Model View字段介绍

Model View字段介绍 can_create = True 是否可以创建can_edit = True 是否可以编辑can_delete = True 是否可以删除list_template = 'admin/model/list.html' 修改显......

dillonxiao
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部