title: What is the best way to get the first letter from a string in Java, returned as a string of length 1?
body: <p>Assume the following:</p>
  
  <pre class="lang-java prettyprint-override"><code>String example      = "something";
  String firstLetter  = "";
  </code></pre>
  
  <p>Are there differences to be aware of with the following ways of assigning <code>firstLetter</code> that could impact performance; <strong>which would be best, and why?</strong></p>
  
  <pre class="lang-java prettyprint-override"><code>firstLetter = String.valueOf(example.charAt(0));
  firstLetter = Character.toString(example.charAt(0));
  firstLetter = example.substring(0, 1);
  </code></pre>
  
  <p>The reason the first letter is being returned as a <code>String</code> is that this is being run in Hadoop, and a string is required to assign to a <code>Text</code> type, <code>firstLetter</code> will be output as a <code>key</code> from a <code>map()</code> method, for example:</p>
  
  <pre class="lang-java prettyprint-override"><code>public class FirstLetterMapper extends Mapper&lt;LongWritable, Text, Text, IntWritable&gt; {
      String line = new String();
      Text firstLetter = new Text();
      IntWritable wordLength = new IntWritable();
  
      @Override
      public void map(LongWritable key, Text value, Context context)
              throws IOException, InterruptedException {
  
          line = value.toString();
  
          for (String word : line.split("\\W+")){
              if (word.length() &gt; 0) {
  
                  // ---------------------------------------------
                  // firstLetter assignment
                  firstLetter.set(String.valueOf(word.charAt(0)).toLowerCase());
                  // ---------------------------------------------
  
                  wordLength.set(word.length());
                  context.write(firstLetter, wordLength);
              }
          }
    }
  }
  </code></pre>