English 中文(简体)
取代 Java首封信?
原标题:Replace the first letter of a String in Java?
  • 时间:2010-03-15 13:31:44
  •  标签:
  • java
  • string

我试图将第一封扼杀信转换为下级。

value.substring(0,1).toLowerCase() + value.substring(1)

这样做是可行的,但是否有更好的办法这样做?

我可以使用替代功能,但Javas的替代品不接受指数。 你必须通过实际的特性/说明。 可以这样做:

value.replaceFirst(value.charAt(0), value.charAt(0).toLowerCase())

替代 第一,预计有2个座标,因此,<代码>数值.charAt(0)可能需改为 Value.substring(0,1)

是否有任何标准办法取代“努力”的第一封信?

最佳回答
问题回答

你使用的法典(我是在类似情况下使用的)的倒数部分是,它似乎只是一个小的cl,理论上产生至少两条临时str子,被立即抛弃。 还有一个问题,即如果你的扼杀时间少于两个特点,会发生什么。

背后是,你不提这些临时扼杀物(使其可以由密码汇编者或JIT最佳化者优化),你的意图对今后的任何法典维护者都是明确的。

如果你需要做其中的数百万次(和<>em>)发现一个明显的业绩问题,我将对业绩表示担忧,并希望澄清。 我也把它埋在某个地方的公用事业中。 另见jambjo在对另一个答复的答复中指出,在<代码>String#to LowerCase和<编码>之间有着重要的差别。 (Edit:答案,因此评论已经删除。 基本上,与当地和统法协会以及使用<代码>String#toLowerCase的docs建议有关,没有<编码>Character.toLowerCase;

<><>Edit>/strong> 由于我身处ir脏的 mo,我认为我看一看,在简单测试中业绩是否有可衡量的差异。 有。 这可能是因为地方差异(例如, app子和 or):

public class Uncap
{
    public static final void main(String[] params)
    {
        String  s;
        String  s2;
        long    start;
        long    end;
        int     counter;

        // Warm up
        s = "Testing";
        start = System.currentTimeMillis();
        for (counter = 1000000; counter > 0; --counter)
        {
            s2 = uncap1(s);
            s2 = uncap2(s);
            s2 = uncap3(s);
        }

        // Test v2
        start = System.currentTimeMillis();
        for (counter = 1000000; counter > 0; --counter)
        {
            s2 = uncap2(s);
        }
        end = System.currentTimeMillis();
        System.out.println("2: " + (end - start));

        // Test v1
        start = System.currentTimeMillis();
        for (counter = 1000000; counter > 0; --counter)
        {
            s2 = uncap1(s);
        }
        end = System.currentTimeMillis();
        System.out.println("1: " + (end - start));

        // Test v3
        start = System.currentTimeMillis();
        for (counter = 1000000; counter > 0; --counter)
        {
            s2 = uncap3(s);
        }
        end = System.currentTimeMillis();
        System.out.println("3: " + (end - start));

        System.exit(0);
    }

    // The simple, direct version; also allows the library to handle
    // locales and Unicode correctly
    private static final String uncap1(String s)
    {
        return s.substring(0,1).toLowerCase() + s.substring(1);
    }

    // This will *not* handle locales and unicode correctly
    private static final String uncap2(String s)
    {
        return Character.toLowerCase(s.charAt(0)) + s.substring(1);
    }

    // This will *not* handle locales and unicode correctly
    private static final String uncap3(String s)
    {
        StringBuffer sb;

        sb = new StringBuffer(s);
        sb.setCharAt(0, Character.toLowerCase(sb.charAt(0)));
        return sb.toString();
    }
}

我在各种测试中混淆了这一命令(将其环绕并重整),以避免时间过长的问题(并试图在最初的任何时候强迫某些人)。 Very unscientific, but uncap1. 始终低于uncap2uncap3 40%。 不是这样,我们再谈论一下英特尔原子加工商的100万个频率中的400米。

因此:我看一看你简单、直截了当的代码,总结为一个实用功能。

注意在扼杀中的任何特性。 由于单编码,它并非总是1至1条绘图。 除非果园确实是你想要的东西,否则衡量基础方法。 正如其他人所建议的那样,那里有明显的利用,但即使你不希望将其用于你的项目,也只是当你工作时做的事情。 你们所能做的最坏事情是,在12个不同地方使用相同的法典,以减轻和将其藏在一类。 也就是说,它可以轻易地分享。

使用<代码>StringBuffer:

buffer.setCharAt(0, Character.toLowerCase(buffer.charAt(0)));




相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...