大家好,我正在使用 Google Currency Api 请求货币转换信息。例如我使用Google Currency Api
将 1 美元兑换成我的当地货币。返回的字符串是 {lhs: "1 US Dollar",rhs: "2 481.38958 Ugandan shillings",error: "",icc: true} 我需要 java 代码来提取 2481.38958 浮点数据类型并将其保存在浮点变量中。请帮忙。非常感谢。
大家好,我正在使用 Google Currency Api 请求货币转换信息。例如我使用Google Currency Api
将 1 美元兑换成我的当地货币。返回的字符串是 {lhs: "1 US Dollar",rhs: "2 481.38958 Ugandan shillings",error: "",icc: true} 我需要 java 代码来提取 2481.38958 浮点数据类型并将其保存在浮点变量中。请帮忙。非常感谢。
对于您的输入 JSON 字符串:
{lhs: "1 U.S. dollar",rhs: "2481.38958 Ugandan shillings",error: "",icc: true}
使用http://json-lib.sourceforge.net/:
JSONObject json = (JSONObject) JSONSerializer.toJSON( jsonTxt );
String dollarString = json.getFloat( "rhs" );
float dollars = Float.parseFloat(dollarString.split(" ")[0]);
此字符串为 JSON 格式。有一些库可以将其作为对象进行操作。示例:GSON ( http://code.google.com/p/google-gson/ ) 或http://www.json.org/java/
类似于:new JSONObject("{lhs:"1 美元",rhs:"2 481.38958 乌干达先令",error:"",icc:true}").get("rhs")
在你必须压制单位之后,也许使用正则表达式。最后... Float.parseFloat("2 481.38958")
考虑值总是介于rhs:
和一个词之间。
String str = "{lhs: \"1 U.S. dollar\",rhs: \"2 481.38958 Ugandan shillings\",error: \"\",icc: true}";
Matcher m = Pattern.compile("rhs:\\s.*?([\\d\\s\\.]+)\\s\\w+").matcher(str);
m.find();
float value = Float.parseFloat(m.group(1).replaceAll("[^\\d\\.]", ""));
System.out.println(value);
如果响应始终包含相同的模式(使用乌干达先令文本),则一种可能的方法是这样的:
package so;
import java.util.StringTokenizer;
public class DemoString {
public static void main(String[] args) {
String s = new String("{lhs: \"1 U.S. dollar\",rhs: \"2 481.38958 Ugandan shillings\",error: \"\",icc: true}") ;
StringTokenizer st = new StringTokenizer(s, "\"");
st.nextToken(); //{lhs:
st.nextToken(); //1 U.S. dollar
st.nextToken(); //,rhs:
String value = st.nextToken(); //2 481.38958 Ugandan shillings
String num = value.substring(0, value.indexOf("U")); // 2 481.38958
num = num.replaceAll(" ", "");
Float fnum = 0f;
try {
fnum = Float.parseFloat(num);
} catch (Exception e) {
e.printStackTrace(System.out);
}
System.out.println("The float number is: " + fnum.toString());
}
}