我正在编写此方法来查看此类字符串的任何变体: “电影:阿甘正传:剧情,浪漫评级:8.8成本:12。50年:1994年最佳演员:汤姆汉克斯票房:55,000,000”
字符串可能因名称,流派等而异。所以我正在尝试编写一种只需检索Cost的方法(在本例中,它将为我检索12.50)。
这是我的代码片段
public static String getPrice(String movieInfo)//returns the current price in the movie info
{
String price=movieInfo.substring(movieInfo.indexOf(" Cost: "), movieInfo.indexOf(" Year: "));
return price;
}
我不确定我是否正确地应用了substring方法,或者它是否适合在此上下文中使用,所以如果我在这种情况下使用该substring方法我是错误的,请告诉我。
答案 0 :(得分:1)
您可以使用许多不同的方法,当前方法中的几点使其始终有效:
- 如果每个“Cost:”属性后跟一个“Year:”属性,那么它将起作用
- 您需要从movieInfo.indexOf(“费用:”)+“费用:”开始。长度()(即5)
醇>
假设在cost和next属性之后会有一个空格,这也适用于任何属性序列:
String cost = movieInfo.split("Cost:")[1].split(" ")[0];
希望这有帮助。
答案 1 :(得分:1)
如果我必须这样做,我会使用正则表达式来获取价格。
String movieInfo = "Movie:Forrest Gump Genre:Drama, Romance Rating:8.8 Cost:12.50 Year:1994 Top Actors:Tom Hanks Box Office:55,000,000";
Pattern p = Pattern.compile("Cost:(\\d+\\.\\d+) ");
Matcher matcher = p.matcher(movieInfo);
matcher.find();
System.out.println(">>"+matcher.group(1)+"<<");
这是一个例子。
答案 2 :(得分:1)
这个问题很有意思。字符串真的很时髦,因为它们可以有许多不同的方法要求相同的东西,但称为不同的方式。我解决这个问题的方法是简单地将所有一个巨大的字符串(没有空格)。
这是怎么做到的?你需要知道某个字符永远不会出现在这样的字符串中。例如,你的冒号(:)字符可以正常工作。但是,将间隔的字符串转换为非间隔字符串是最复杂的部分。我们想用冒号替换每个空格,并删除每个当前冒号。
String ufInfo = "Movie:Forrest Gump Genre:Drama, Romance Rating:8.8 Cost:12.50 Year:1994 Top Actors:Tom Hanks Box Office:55,000,000"
public String makeCodeFriendlyString(String infoString) {
return infoString.replaceAll(":", "").replaceAll(" ", ":"); // Why remove colons and then add spaces?
}
这段代码的作用是创建我们的ufInfo(userFriendlyInfo)字符串并将数据存储到其中。名为makeCodeFriendlyString(String infoStirng)
的方法完全符合它的要求。它将每个当前冒号更改为空,并将每个当前空间更改为冒号。你会理解为什么我们现在删除了冒号:
String[] splitInfo = makeCodeFriendlyString(ufInfo).split(":");
public static String getPrice(String cfInfo) {
for(String s : splitInfo) if(s.startsWith("Cost") return s.substring("Cost".length());
return "NOT-FOUND";
}
此代码现在所做的是创建一个存储在字符串中的所有数据的数组(例如,电影标题,流派,评级等),但它旁边的所有数据都连接到它。 我们如何解决此问题?这不是一个真正的问题。我们想要这个!由于我们现在有一个类似“Cost12.50”的字符串,我们可以轻松收集所需的数据。我们知道我们正在寻找成本,因此我们需要一个我们正在使用的字符串的子字符串。 for(String s : splitInfo)
是一个增强的for循环。它遍历所有数据集,当前字符串被迭代为值s。 if(s.startsWith("Cost")
检查当前字符串是否以“Cost”开头。如果是,return s.substring("Cost".length());
将返回“{1}”的子字符串,而不是“费用”之后的任何内容,因此它将返回“12.50”
报告任何错误!
很高兴随时提供帮助, 贾罗德。