、、、、など"45"
の値を持つことができる文字列があります。これらすべてについて、すべて小数部の場合は保存し、そうでない場合は."45.00"
"45.0"
"45.000"
"45.23"
"45"
0
"45.23"
どうすればいいですか?これには正規表現を使用する必要がありますか?
文字列を小数点で分割して、最初の要素を取得することができます。
java.util.Arrays.toString(testString.split("\\.")
はい、正規表現を使用できます。これを試してください
s = s.replaceAll("(.?)(\\.0+)?", "$1");
以下を使用してください。
s.replaceAll("\\.0+", "")
さて、少し調べてみたら、探しているものが見つかったと思います。正規表現でそれを行う必要はありません。JavaにはDecimalFormatと呼ばれる10進フォーマット用の特殊なクラスがあり、このページでJavaで数値をフォーマットする方法を確認することをお勧めします。次に例を示します。
public class NumberFormat {
public static void main(String[] args){
DecimalFormat myFormatter = new DecimalFormat("###.##");
System.out.println(myFormatter.format(45));
System.out.println(myFormatter.format(45.000));
System.out.println(myFormatter.format(45.23));
System.out.println(myFormatter.format(45.258));
}
}
出力を生成します:
45
45
45,23
45,26
でStringTokenizerを使用してトークン化します。区切り文字として
2番目のトークンがゼロの場合は2番目のトークンを無視し、そうでない場合は2番目のトークンを検討します
サンプルコード
StringTokenizer st = StringTokenizer(s,".");
int count = 0;
while(st.hasTokens)
{
if (count==1)
{
// Read the token and compare it to zero and modify the original string s and your further processing
}
else{
st.nextToken();
count++;
}
}
,
あなたの文字列は、またはで区切られていると思います,
。
double のリストが必要な場合は、次を使用できます。
List<Double> lst = new ArrayList<Double>();
for(String s : yourString.split(",\\s?")) {
try {
Double double = Double.valueOf(s);
lst.add(double);
} catch(NumberFormatException nfe) {
nfe.printStackTrace();
}
}
番号のリストが必要な場合は、次を使用できます。
List<Number> lst = new ArrayList<Number>();
for(String s : yourString.split(",\\s?")) {
try {
Double double = Double.valueOf(s);
if(double == (int)double) {
lst.add(double);
} else {
lst.add((Integer)double.intValue());
}
} catch(NumberFormatException nfe) {
nfe.printStackTrace();
}
}