Remove certain characters from string [duplicate]
Asked Answered
F

2

6

I want to create a program that gives the number of characters, words, etc... in a user-inputted string. To get the word count I need to remove all the periods and commas form a string. So far I have this:

import javax.swing.JOptionPane;
public class WordUtilities
{
   public static void main(String args[])
   {
      {
      String s = JOptionPane.showInputDialog("Enter in any text.");

      int a = s.length();
      String str = s.replaceAll(",", "");
      String str1 = str.replaceAll(".", "");
      System.out.println("Number of characters: " + a);
      System.out.println(str1);
      }
   }
}

But in the end I get only this:

Number of characters: (...)

Why is it not giving me the string without the commas and periods? What do I need to fix?

Furr answered 31/12, 2013 at 18:51 Comment(4)
cause replaceAll exepcts a regex.. and . is a special symbolShopwindow
@Shopwindow So what syntax do I have to use to remove the special symbols (. and ,)?Furr
You'll need to remove more than just a period and a comma: colons, semicolons, dashes (as opposed to hyphens), apostrophes, double quotes... it's better to remove everything except what you want to count as a character.Subtrahend
@dasblinkenlight s = str.replaceAll("[.]","") from the other question fixed it. ThanksFurr
A
11

You can use:

String str1 = str.replaceAll("[.]", "");

instead of:

String str1 = str.replaceAll(".", "");

As @nachokk said, you may want to read something about regex, since replaceAll first parameter expects for a regex expression.

Edit:

Or just this:

String str1 = s.replaceAll("[,.]", "");

to make it all in one sentence.

Atelectasis answered 31/12, 2013 at 18:58 Comment(3)
The . still needs to be escaped to "[\.]"Subtrahend
@JeremyMiller, not in a character classVareck
@peeskillet - I stand corrected. Thanks!Subtrahend
S
4

You can just use String#replace() instead of replaceAll cause String#replaceAll

Replaces each substring of this string that matches the given regular expression with the given replacement.

So in code with replace is

 str = str.replace(",","");
 str = str.replace(".","");

Or you could use a proper regular expression all in one:

str = str.replaceAll("[.,]", "");
Shopwindow answered 31/12, 2013 at 18:53 Comment(5)
+1 for difference clarificationVareck
You should reverse your code because the explanation is for the latter caseVareck
@peeskillet i don't understand what you meanShopwindow
The code at the bottom matches your answer description. So put that code first. Then you can use the OR for the relaceAll case. Make more logically sense and will make your answer flow more smoothlyVareck
I like your answer the best. People are so used to creating new strings, they forget you can just make the old string equal the modified string, but in which case, you should've used s instead of strVareck

© 2022 - 2024 — McMap. All rights reserved.