Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java字符串删除所有非数字字符,但保留小数分隔符_Java_String_Character_Decimal - Fatal编程技术网

Java字符串删除所有非数字字符,但保留小数分隔符

Java字符串删除所有非数字字符,但保留小数分隔符,java,string,character,decimal,Java,String,Character,Decimal,正在尝试删除所有不是0-9和句点的字母和字符。我使用的是Character.isDigit(),但它也会删除小数,我如何也能保留小数?请尝试以下代码: String str = "a12.334tyz.78x"; str = str.replaceAll("[^\\d.]", ""); 现在str将包含“12.334.78”我将使用正则表达式 String text = "-jaskdh2367sd.27askjdfh23"; String digits = text.replaceAll("

正在尝试删除所有不是0-9和句点的字母和字符。我使用的是Character.isDigit(),但它也会删除小数,我如何也能保留小数?

请尝试以下代码:

String str = "a12.334tyz.78x";
str = str.replaceAll("[^\\d.]", "");
现在
str
将包含
“12.334.78”

我将使用正则表达式

String text = "-jaskdh2367sd.27askjdfh23";
String digits = text.replaceAll("[^0-9.]", "");
System.out.println(digits);
印刷品

2367.2723
对于负数,您可能希望保留
-

番石榴:

String input = "abx123.5";
String result = CharMatcher.inRange('0', '9').or(CharMatcher.is('.')).retainFrom(input);

结果:0097-557890-999

如果字符串中也不需要“-”,可以这样做:

String phoneNumberstr = "Tel: 00971-55 7890 999";      
String numberRefined = phoneNumberstr.replaceAll("[^0-9]", "");

结果:0097557890999

不使用正则表达式的简单方法:

为dot
”添加额外的字符检查。
将解决以下要求:

public static String getOnlyNumerics(String str) {
    if (str == null) {
        return null;
    }
    StringBuffer strBuff = new StringBuffer();
    char c;
    for (int i = 0; i < str.length() ; i++) {
        c = str.charAt(i);
        if (Character.isDigit(c) || c == '.') {
            strBuff.append(c);
        }
    }
    return strBuff.toString();
}
公共静态字符串getOnlyNumerics(字符串str){
如果(str==null){
返回null;
}
StringBuffer strBuff=新的StringBuffer();
字符c;
对于(int i=0;i
用java 8流替换它的方法:

public static void main(String[] args) throws IOException
{
    String test = "ab19198zxncvl1308j10923.";
    StringBuilder result = new StringBuilder();

    test.chars().mapToObj( i-> (char)i ).filter( c -> Character.isDigit(c) || c == '.' ).forEach( c -> result.append(c) );

    System.out.println( result ); //returns 19198.130810923.
}

货币小数分隔符可能因语言环境而异。将代码< > ./>作为分隔符始终是危险的。 i、 e

我认为正确的方法是:

  • 默认情况下,通过
    DecimalFormatSymbols
    获取十进制字符或 指定的一个
  • Cook正则表达式模式带有十进制字符,以便仅获取数字
我是如何解决这个问题的:

代码:


我希望这可能会有帮助,“.

对于来这里寻找Kotlin的Android用户

val dirtyString = "This handles null inputs, negative numbers and decimals (you need to include the Apache Commons Lang library, version 3.8 or higher, in your project):

import org.apache.commons.lang3.RegExUtils;
result = RegExUtils.removeAll(input, "-?[^\\d.]");

val dirtyString=“这将处理空输入、负数和小数(您需要在项目中包括Apache Commons Lang库,3.8版或更高版本):



库参考:

[myStr=myStr.replaceAll(“[^\\d]”,“)][1][1]:这是一种奇怪的说法。“所有不是0-9和句点的字母和字符”不等于“所有不是0-9和句点的字符”吗"? 我的意思是,字母不是0-9,也不是句号。你不应该在regexp中转义点。你能解释一下
^
在这个语句中的意思吗?@MansourFahad在regex
[^
中不是指这些字符,而是指
[]
a
只是一个
,因为a
只是一个
a
并且没有任何意义,我能把它扔掉吗?@MansourFahad只有在你的结果中不需要
s的情况下。这也可以起作用:>str=str.replaceAll([\\D.],“”)Ó@scar López:如何也包括负数?我的意思是,我必须用一个空格来替换所有不是正数/负数的东西。如何做?@PankajSinghal只需在正则表达式中包括负号:
[^\\d.-]
@yeaaahh..hamfhamf不,那不行。我们必须否定整个组(包括数字和点),您建议的代码只对数字求反,结果不会根据需要包含点。您测试过吗?使用上面的示例代码,您的代码返回
“1233478”
,这是不正确的。即使在Android中也能很好地工作。谢谢。感谢伟大的answe!!rDunno为什么人们否决了你的解决方案…帮助了我很多,谢谢!投票了!谢谢Zarial,我看到Robert实际上编辑了我的答案,从str=str.replaceAll(“\D+”);到str=str.replaceAll(“\\D+”,”);…所以我在将它粘贴到StackO的编辑框中时犯了这个错误。谢谢你Robert的修复。现在它工作了!它被否决了,因为它是一个重新发布。完全相同的答案在5年前就已经被转写了!!参见上面:@SaadBenbouzid?你对完全相同的答案的定义是什么?@SaadBenbouzid 1)这是注释而不是答案2)这是一个完全不同的正则表达式3)不是所有使用正则表达式D的答案都是相同的,就像指出所有使用
printf()的C语言答案一样
是重复的。此外,如果您在注释中看到答案,您可以要求mod将其转换为答案,甚至可以自己添加答案-StackOverlow上不鼓励使用注释中的答案。@egorikem如果您的项目已经在使用guava,您可以使用它,而不需要额外的费用。。或者使用纯Java中的数字。虽然没有询问,但这是唯一的问题与本地化一起工作的解决方案。
str = str.replaceAll("\\D+","");
╔════════════════╦═══════════════════╗
║    Locale      ║      Sample       ║
╠════════════════╬═══════════════════╣
║ USA            ║ $1,222,333.44 USD ║
║ United Kingdom ║ £1.222.333,44 GBP ║
║ European       ║ €1.333.333,44 EUR ║
╚════════════════╩═══════════════════╝
import java.text.DecimalFormatSymbols;
import java.util.Locale;

    public static String getDigit(String quote, Locale locale) {
    char decimalSeparator;
    if (locale == null) {
        decimalSeparator = new DecimalFormatSymbols().getDecimalSeparator();
    } else {
        decimalSeparator = new DecimalFormatSymbols(locale).getDecimalSeparator();
    }

    String regex = "[^0-9" + decimalSeparator + "]";
    String valueOnlyDigit = quote.replaceAll(regex, "");
    try {
        return valueOnlyDigit;
    } catch (ArithmeticException | NumberFormatException e) {
        Log.e(TAG, "Error in getMoneyAsDecimal", e);
        return null;
    }
    return null;
}
val dirtyString = "This handles null inputs, negative numbers and decimals (you need to include the Apache Commons Lang library, version 3.8 or higher, in your project):

import org.apache.commons.lang3.RegExUtils;
result = RegExUtils.removeAll(input, "-?[^\\d.]");