基本上我在尝试格式化从数据库中检索的字符串时遇到了一些问题。这是我的嵌套for循环:
for (int count = 0; count < monthStr.length; count++) {
for (int i = 0; i < trans_list.size(); i++) {
if (count == Integer.parseInt(trans_list.get(i).getDate())) {
expensesSeries.add(x[count], trans_list.get(i)
.getAmount());
}
else{
expensesSeries.add(x[count], 0);
}
}
}
基本上getDate()将以这些格式返回字符串:01,02,03,04,依此类推。直到12.我要做的是将1-12的计数与我检索的字符串进行比较。有没有办法从字符串中删除01,02前面的0?
提前致谢。
修改
boolean setZero = true;
String[] monthStr = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
"Aug", "Sep", "Oct", "Nov", "Dec" };
// Creating an XYSeries for Expenses
XYSeries expensesSeries = new XYSeries("Expenses");
for (int count = 1; count < 13; count++) {
for (int i = 0; i < trans_list.size(); i++) {
if (count == Integer.parseInt(trans_list.get(i).getDate())) {
setZero = false;
expensesSeries.add(count, trans_list.get(i)
.getAmount());
}
if(setZero)
{
expensesSeries.add(count, 0);
setZero = true;
}
}
}
for (int j = 0; j < monthStr.length; j++) {
multiRenderer.addXTextLabel(j+1, monthStr[j]);
}
}
答案 0 :(得分:1)
Java格式字符串,用于删除变量前面的“0”
ParseInt
应该能够从int
获得String
从0开始(只要它在int值之前)但是如果您需要它用于其他目的而未显示在此代码中,只需使用起始字符replaceAll()
^
string.replaceAll("^0","");
和多个0,同时使用*
string.replaceAll("^0*","");
此处提到的具体问题
为什么嵌套循环?看起来您希望trans_list
的内容通过expensesSeries
添加为点,在没有数据的地方为零。只需使用数组跟踪总计: -
int[] monthlyTotals = new int[12];
for (int i=0; i<trans_list.size(); i++)
{
//Add item at index i trans_list at location i in chart
int chartXIndex = Integer.parseInt(trans_list.get(i).getdate());
monthlyTotals[chartXIndex] += trans_list.get(i).getAmount();
}
现在你有一个数组代表你想要的图表,所以只需循环将它们添加到图表
for (int i=0; i<monthlyTotals.length; i++)
{
expensesSeries.add(i, monthlyTotals[i]);
multiRenderer.addXTextLabel(i+1, monthStr[i]); //combine your last loop as well
}
嵌套循环可能会造成混淆,如果可能,请避免使用。
答案 1 :(得分:0)
Integer.parseInt(...)
应该做到这一点。它看起来已经在你的代码中,所以我相信它有效,也许还有别的东西导致了这个问题。
这是你的问题?你有例外吗?奇怪的结果?
我建议你改行
expensesSeries.add(x[count], trans_list.get(i).getAmount());
到
expensesSeries.add(Integer.parseInt(trans_list.get(i).getDate()) - 1, trans_list.get(i).getAmount());
(或更好将 Integer.parseInt(trans_list.get(i).getDate())
分配给变量,并在if(...)中添加并添加(...)
不确定它是否会有所帮助,但x似乎毫无意义,可能会造成一些混乱。
<强>更新强>
我认为,引入boolean
变量不是必需的。现在你的代码无法正常工作。想象一下,你没有数据的情况,比如四月(4)。然后第一个if
不会被处理,但第二个也没有被处理,所以你不会将数据(甚至是值0)添加到expensedesSeries中,这将导致你面临的问题(没有值)有些月份)。在这里,我认为你应该做的是(编辑你当前的代码):
String[] monthStr = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
"Aug", "Sep", "Oct", "Nov", "Dec" };
// Creating an XYSeries for Expenses
XYSeries expensesSeries = new XYSeries("Expenses");
for (int count = 1; count < 13; count++) {
for (int i = 0; i < trans_list.size(); i++) {
if (count == Integer.parseInt(trans_list.get(i).getDate())) {
expensesSeries.add(count, trans_list.get(i)
.getAmount());
} else {
expensesSeries.add(count, 0);
}
}
}
for (int j = 0; j < monthStr.length; j++) {
multiRenderer.addXTextLabel(j+1, monthStr[j]);
}
现在它将获取所有月份,然后每个月它将获取所有交易,并为每个月的expenseSeries添加0或一些特定值。如果这不起作用,我建议使用@RossDrew解决方案(它是简化的,更优化和直接的)。