Java格式化字符串,用于删除变量前面的“0”

时间:2014-09-02 13:07:17

标签: java android achartengine

基本上我在尝试格式化从数据库中检索的字符串时遇到了一些问题。这是我的嵌套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]);
    }
}

enter image description here

2 个答案:

答案 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解决方案(它是简化的,更优化和直接的)。