title: java.text.Normalizer: isNormalized() returns false, but Normalize doesn't change the string
body: <p>I just started learning about <code>java.text.Normalizer</code>. It seemed pretty straightforward. I've got one of the "weird" dashes to deal with (specifically <a href="http://en.wikipedia.org/wiki/%E2%80%93#En_dash" rel="nofollow">U+2013</a>)</p>
  
  <p>I'd like to convert it to a normal dash character, so I made some quick testing code:</p>
  
  <pre><code>import java.text.Normalizer;
  
  public class Test {
  public static void main(String[] args) {
      String weirdDash = "–";
      String normalDash = "-";
  
      boolean b = Normalizer.isNormalized(weirdDash, Normalizer.Form.NFD);
      if(b == false) {
          System.out.println("Java thinks the weird dash is normal");
          return;
      }
      String normalizedWeirdDash = Normalizer.normalize(weirdDash, Normalizer.Form.NFD);
  
      if(normalizedWeirdDash.equals(normalDash)) {
          System.out.println("Yay!");
      } else {
          System.out.println("Boo! normalized weird dash "+(normalizedWeirdDash.equals(weirdDash) ? "didn't change" : "= " + normalizedWeirdDash));
      }
  }
  }
  </code></pre>
  
  <p>The output of main() is "Boo! normalized weird dash didn't change"</p>
  
  <p>How is that possible? It means that Normalizer.isNormalized returned false, but then calling  normalize() on the same string (with the same Normalizer.Form) did not change it at all.</p>
  
  <p>Did I miss something?</p>
  
  <p><strong>EDIT</strong>
  This method outputs "true":</p>
  
  <pre><code>public class Test {
      public static void main(String[] args) {
          String weirdDash = "–";
          String normalDash = "-";
          String newDash = weirdDash.replaceAll("(\\\u2013)", "-");
          System.out.println(newDash.equals(normalDash));
      }
  }
  </code></pre>
  
  <p>So, if all else fails, I can use this. But for curiosity's sake, what's up with Normalizer?</p>