zoukankan      html  css  js  c++  java
  • 十个最常见的Java字符串问题

    翻译自:Top 10 questions of Java Strings

    1.怎样比较字符串?用”==”还是用equals()?

    简单地说,”==”测试两个字符串的引用是否相同,equals()测试两个字符串的值是否相同。除非你希望检查两个字符串是否是同一个对象,否则最好用equals()。
    如果你知道字符串驻留机制会更好。

    2.为什么对于安全性敏感的信息char[]要优于String?

    字符串是不变的,这也就意味着字符串一旦被创建,它们将一直保持在那直到被垃圾回收器清理为止。而对于一个数组,你可以明确的修改它的元素。这样一来,安全性敏感信息(比如密码)将不会出现在系统的任何其它地方。

    3.我们能不能在switch语句中使用String?

    对于Java7答案是肯定的。从JDK7开始,我们可以使用String作为switch语句的条件。在JDK6之前,我们不能使用String作为switch语句的条件。

    // java 7 only!
    switch (str.toLowerCase()) {
          case "a":
               value = 1;
               break;
          case "b":
               value = 2;
               break;
    }
    

    4.怎样把字符串转换为整数?

    int n = Integer.parseInt("10");
    

    很简单,使用太过频繁以致有时候会被忽略。

    5.怎样分解一个有空白字符的字符串?

    我们可以简单的用正则表达式来做分解。”s”代表空白字符,例如” “,” ”,” ”,” ”。

    String[] strArray = aString.split("\s+");
    

    6.substring()方法真正做了什么?

    在JDK6中,substring()方法提供了一个表示已有字符串的字符数组的窗口,但并没有创建一个新的字符串。要创建一个由新的字符数组表示的新字符串,可以像下面一样添加一个空串:

    str.substring(m, n) + ""
    

    这样就创建一个表示新字符串的全新的字符数组。上面的方法有时候会使代码更快,因为垃圾回收器会回收掉大的不用的字符串,只保留一个子串。
    在Oracle JDK 7中,substring()创建一个新的字符数组,不用已有的数组。The substring() Method in JDK 6 and JDK 7 中的图表说明了JDK 6和JDK 7的substring()之间的差异。

    7.String vs StringBuilder vs StringBuffer

    String vs StringBuilder:StringBuilder是可变的,这意味着在创建之后人能够改变它的值。
    StringBuilder vs StringBuffer:StringBuffer是同步的,这意味着它是线程安全的,但比StringBuilder更慢。

    8.怎样重复一个字符串?

    在Python中,我们可以通过乘以一个数来重复字符串。在Java中,我们可以通过Apache Commons Lang包中的StringUtils类的repeat()方法重复字符串。

    String str = "abcd";
    String repeated = StringUtils.repeat(str,3);
    //abcdabcdabcd
    

    9.怎样把字符串转换为日期?

    String str = "Sep 17, 2013";
    Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);
    System.out.println(date);
    //Tue Sep 17 00:00:00 EDT 2013
    

    10.怎样统计一个字符在字符串中出现的次数?

    使用Apache Commons Lang包中的StringUtils类。

    int n = StringUtils.countMatches("11112222", "1");
    System.out.println(n);
    

    附加题
    怎样检测一个字符串只包含大写字母

    翻译自:Top 10 questions of Java Strings

  • 相关阅读:
    LeetCode 230. Kth Smallest Element in a BST
    LeetCode 114. Flatten Binary Tree to Linked List
    LeetCode 222. Count Complete Tree Nodes
    LeetCode 129. Sum Root to Leaf Numbers
    LeetCode 113. Path Sum II
    LeetCode 257. Binary Tree Paths
    Java Convert String & Int
    Java Annotations
    LeetCode 236. Lowest Common Ancestor of a Binary Tree
    LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/liushaobo/p/4380018.html
Copyright © 2011-2022 走看看