`
dasheng
  • 浏览: 149078 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

<java编程思想>学习笔记13,第十三章 字符串

阅读更多

1,字符串操作是计算机程序设计中最常见的行为。

 

2,String是不可变的

 

当把String 对象当作方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过。

 

3,重载“+”和StringBuilder

 

public class WhitherStringBuilder {
  public String implicit(String[] fields) {
    String result = "";
    for(int i = 0; i < fields.length; i++)
      result += fields[i];   //new了 fields.lengthStringBuilder
    return result;
  }
  public String explicit(String[] fields) {
    StringBuilder result = new StringBuilder(); //只new了一个StringBuilder
    for(int i = 0; i < fields.length; i++)
      result.append(fields[i]);
    return result.toString();
  }
} ///:~

 

javap -c WhitherStringBuilder   //查看jvm字节码

 

4,无意识的递归

 

public class InfiniteRecursion {
  public String toString() {
    return " InfiniteRecursion address: " + this + "\n";
  }
  public static void main(String[] args) {
    List<InfiniteRecursion> v =
      new ArrayList<InfiniteRecursion>();
    for(int i = 0; i < 10; i++)
      v.add(new InfiniteRecursion());
    System.out.println(v);
  }
} ///:~

 

this 应该改成:super.toString();

 

5,格式化输出

 

jdk5推出了c语言中printf()风格的格式化输出这一功能。这不仅使得控制输出的代码更加简单,同时也给java开发者对

 

于输出格式与排版更强大的控制能力。

 

public class SimpleFormat {
  public static void main(String[] args) {
    int x = 5;
    double y = 5.332542;
    // The old way:
  
  System.out.println("Row 1: [" + x + " " + y + "]");
    // The new way:
 
   System.out.format("Row 1: [%d %f]\n", x, y);
    // or
   
System.out.printf("Row 1: [%d %f]\n", x, y);
  }
} /* Output:

 

6,Formatter类

 

 在java中,所有的新格式化的功能都由java.util.Formatter 类来处理,可以把Formatter看作一个翻译器,它把你的格

 

式化字符串与数据翻译成需要的结果。

 

public class Turtle {
  private String name;
  private Formatter f;
  public Turtle(String name, Formatter f) {
    this.name = name;
    this.f = f;
  }
  public void move(int x, int y) {
  
  f.format("%s The Turtle is at (%d,%d)\n", name, x, y);
  }
  public static void main(String[] args) {
    PrintStream outAlias = System.out;
    Turtle tommy = new Turtle("Tommy",
      new Formatter(System.out));
    Turtle terry = new Turtle("Terry",
      new Formatter(outAlias));
    tommy.move(0,0);
    terry.move(4,8);
    tommy.move(3,4);
    terry.move(2,5);
    tommy.move(3,3);
    terry.move(3,3);
  }
} /* Output:

 

 

7,正则表达式

 

正则表达式已经整合到标准的Unix工具集之中,例如sed和awk,以及程序设计语言之中,例如Python和Perl。而在

 

java中,字符串操作主要集中在String,StringBuffer和StringTokenizer类。与正则表达式比较,它们只能提供相当

 

简单的功能。

 

8,用正则表达式扫描

 

public class ThreatAnalyzer {
  static String threatData =
    "
58.27.82.161@02/10/2005\n" +
    "
204.45.234.40@02/11/2005\n" +
    "
58.27.82.161@02/11/2005\n" +
    "
58.27.82.161@02/12/2005\n" +
    "
58.27.82.161@02/12/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);
    }
  }
} /* Output:
Threat on 02/10/2005 from 58.27.82.161
Threat on 02/11/2005 from 204.45.234.40
Threat on 02/11/2005 from 58.27.82.161
Threat on 02/12/2005 from 58.27.82.161
Threat on 02/12/2005 from 58.27.82.161

 

9,在java引入正则表达式(jdk1.4)和Scanner类(jdk5)之前,分割字符串的唯一方法就是使用StringtoKennizer

 

来分词。

 

public class ReplacingStringTokenizer {
  public static void main(String[] args) {
    String input = "But I'm not dead yet! I feel happy!";
   
StringTokenizer stoke = new StringTokenizer(input);
    while(stoke.hasMoreElements())
      System.out.print(stoke.nextToken() + " ");
    System.out.println();
    System.out.println(Arrays.toString(input.split(" ")));
   
Scanner scanner = new Scanner(input);
    while(scanner.hasNext())
      System.out.print(scanner.next() + " ");
  }
} /* Output:
But I'm not dead yet! I feel happy!
[But, I'm, not, dead, yet!, I, feel, happy!]
But I'm not dead yet! I feel happy!

 

 

分享到:
评论

相关推荐

    corejava重点笔记

    本篇笔记将围绕Java的基础知识,特别是基本数据类型、变量、运算以及字符串等方面进行深入探讨。 一、基本数据类型 Java的基本数据类型包括整型、浮点型、字符型和布尔型,共计八种。整型分为byte、short、int和...

    <<JAVA学习笔记>>实例源代码

    本压缩包中包含的"Example"文件夹,极有可能是《JAVA学习笔记》一书中的实例源代码,旨在帮助读者深入理解书中讲解的Java编程原理和实践技巧。下面我们将对这些源代码进行详细解读,以便更好地掌握Java编程。 1. **...

    Java学习笔记之字符串

    Java字符串学习笔记,比较系统的讲解了Java的字符串知识

    JAVA 字符串应用笔记

    在Java编程语言中,字符串是极其重要且常用的数据类型,尤其在Android开发中更是不可或缺。字符串主要用于处理文本信息,如用户输入、文件内容、网络数据等。以下是对"JAVA 字符串应用笔记"中可能涉及的一些核心知识...

    java笔记字符串的应用

    Java 字符串应用笔记 在 Java 中,字符串是最基本的数据类型之一,理解字符串的应用是 Java 开发的基础。本篇笔记将详细介绍 Java 中 equals 和 == 的区别、字符串相关的几个函数介绍、String 和 StringBuffer 的...

    Java编程思想学习笔记

    在讨论Java编程思想学习笔记时,首先需要了解的是Java语言的平台无关性,而这一特性正是通过Java虚拟机(JVM)得以实现的。JVM作为Java程序设计的关键组成部分,对于Java开发人员来说是必须掌握的基础知识。在该学习...

    Java学习笔记学习笔记

    Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...

    Java 学习笔记-手机书 Rev.3 (080603)

    &lt;br&gt;&lt;br&gt;此为第三版Java Study Note Rev.3 (080603)&lt;br&gt;&lt;br&gt;1).增加了学习笔记下半部。&lt;br&gt;&lt;br&gt;在转换的过程中可能存在其他失误,请见谅,如果有好的见解请登陆我的博客:&lt;br&gt;&lt;br&gt;...

    JAVA个人学习笔记

    JAVA学习笔记是面向对象编程语言的学习笔记,涵盖了JAVA的基本概念、面向对象编程思想、类和对象的概念、实例变量和局部变量的区别、方法的定义和调用、类型转换、精度问题、移位问题、switch语句的使用等内容。...

    java编程思想读书笔记

    《Java编程思想》是 Bruce Eckel 的经典著作,这本书深入浅出地讲解了Java语言的核心概念和编程技术。这份读书笔记记录了读者在研读此书过程中的理解和体会,涵盖了从基础语法到高级特性的全面解析。以下是笔记中...

    java编程思想笔记

    java编程思想笔记,建议与书本结合使用。。。。。。。。。。。

    jive.chm

    1 应用Struts的网站建设 &lt;br&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt;Java基础&lt;br&gt; 1 20个Java基础Tips &lt;br&gt; 2 abstract,static,final修饰符 &lt;br&gt; 3 ChinaUnix.net Java精华贴 &lt;br&gt; 4 ANT学习笔记 &lt;br&gt; 5 极度性能调整 &lt;br&gt;&lt;br&gt; &lt;br&gt;FAQs&lt;br&gt;...

    《java编程思想》之学习笔记

    java编程思想的笔记。是别人的学习笔记。

    JSTL参考资料+学习笔记

    - `&lt;x:parse&gt;`:将XML字符串解析为DOM对象。 - `&lt;x:transform&gt;`:使用XSLT转换XML数据。 - `&lt;x:out&gt;`:显示XML数据。 6. **最佳实践**: - 尽量使用EL表达式替代脚本let语句。 - 避免在JSP页面中写Java代码,...

    Java编程思想笔记(全)

    第十三章专门讨论了Java中的字符串处理。字符串是Java中最常用的数据类型之一。本章介绍了String和StringBuilder/StringBuffer类的使用方法,以及如何进行字符串拼接、分割和匹配等操作。此外,还会介绍字符串的不可...

    java学习笔记模版

    【Java学习笔记模版】 Java实习工程师在学习过程中,会涉及到许多关键知识点,尤其是在企业级开发的场景下。从给出的四天学习笔记来看,实习生正在逐步掌握Java Web开发的基础和核心技能。以下是对这些知识点的详细...

    JAVA编程思想笔记

    ### JAVA编程思想笔记 #### 一、编程语言与Java特性 1. **编程语言类别**: - **机器语言**:直接与硬件交互的语言,由0和1组成。 - **汇编语言**:接近机器语言,使用助记符表示指令。 - **高级语言**:更接近...

    Java 学习笔记Java学习笔记

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。

Global site tag (gtag.js) - Google Analytics