笔记_java编程思想_第十三章(字符串)

一, 不可变的String

  1. 直接在String上的拼接,截取,变形都是返回另一个String对象,即当这些操作太过频繁时,会消耗过多内存。
  2. 这时便要考虑StringBuff与StringBuilder。
public class StringDemo1 
{
    public static void main(String[] args) 
    {
        StringBuilder sb = new StringBuilder();
        sb.append("You are sb!");
        sb.delete(sb.length()-3, sb.length());
        sb.insert(sb.length()-1, " handsome");
        System.out.println(sb);
        System.out.println(sb.substring(0,3));
        System.out.println(sb.replace(0, sb.indexOf("e")+1, "I am "));
        System.out.println(sb.reverse());
        
    }
}
/*
输出:
You are handsome 
You
I am  handsome 
 emosdnah  ma I
*/

二, 格式化输出

1. System.out.format == System.out.printf(与c语言的printf输出一致)

public class FormatDemo 
{
    public static void main(String[] args) 
    {
        int i = 3;
        double d = 3.4;
        String s = "hell";
        System.out.println(i+" "+d+" "+s);
        System.out.format("%d %.1f %s\n",i,d,s);
        System.out.printf("%d %.1f %s\n",i,d,s);
    }
}
/*
输出:
3 3.4 hell
3 3.4 hell
3 3.4 hell
*/

2. Formatter类

import java.util.Formatter;
class User
{
    private String nickname;
    private Formatter f;
    User(String nickname,Formatter f)
    {
        this.nickname = nickname;
        this.f = f;
    }
    void getInfo()
    {
        f.format("%s",nickname);
    }
}
public class FormatDemo2 
{
    public static void main(String[] args) 
    {
        User user = new User("Teskinfly",new Formatter(System.out));//构造器中传入流对象,用format方法直接写入
        user.getInfo();
    }
}
/*
输出:
Teskinfly
*/

3. String.format():返回格式化的字符串

三, 正则表达式

1. 创建正则表达式(Pattern)

2. 量词

  1. 贪婪型(我全都要)
  2. 勉强型(找一个最少满足需求的):贪婪型+'?'
  3. 占用型:勉强型+'+'

3.pattern和Matcher

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternAndMatcher 
{
    public static void main(String[] args) 
    {
        String s = "wer223sfeeax234sa";
        Pattern p = Pattern.compile("[we]e\\w");
        Matcher m = p.matcher(s);
        while(m.find())
        {
            System.out.println(m.group()+" "+m.start()+" "+m.end());
        }
    }
}

4.Matcher常用操作:

  1. 分割:split
  2. 替换:replaceFirtst replaceAll appendReplacement
  3. 重置:reset

四,扫描输入

1. Scanner

import java.util.Scanner;
public class ScannerDemo 
{
    public static void main(String[] args) 
    {
        Scanner sc = new Scanner("abcede\n123 java");
        String s = sc.next();
        int i = sc.nextInt();
        String s2 = sc.next();
        System.out.println(s+" "+i+" "+s2);
        sc.close();
    }
}

2. Scanner不仅能扫描基本类型,也能进行正则表达式扫描

import java.util.Scanner;
import java.util.regex.MatchResult;

public class ThreatAnalyzer {

    static String threatData =
            "58.27.82.161@02/10/2005\n" +
            "124.45.82.161@02/10/2005\n" +
            "58.27.82.161@02/10/2005\n" +
            "72.27.82.161@02/10/2005\n" +
             "[Next log section with different data format]";

    public static void main(String[] args) {
        Scanner scanner = new Scanner(threatData);
        String pattern = "(\\d+[.]\\d+[.]\\d+[.]\\d+)@(\\d{2}/\\d{2}/\\d{4})";
        while (scanner.hasNext(pattern)) {
            scanner.next(pattern);
            MatchResult match = scanner.match();
            String ip = match.group(1);
            String date = match.group(2);
            System.out.format("Threat on %s from %s\n", date, ip);
        }
    }
}
/*
输出:
Threat on 02/10/2005 from 58.27.82.161
Threat on 02/10/2005 from 124.45.82.161
Threat on 02/10/2005 from 58.27.82.161
Threat on 02/10/2005 from 72.27.82.161
*/

结束

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容