【问题标题】:Can I hold string variables in a string array? (Java)我可以在字符串数组中保存字符串变量吗? (爪哇)
【发布时间】:2010-12-08 17:10:34
【问题描述】:

这里的基本问题是,我可以将字符串变量与更多文本一起放入字符串数组中的某个位置吗?

这就是我想要做的事情

public static final String CAT_BUD_TAB = "CAT_BUD_TAB";
public static final String inI = "INSERT INTO ";
public static final String val = " VALUES ";

public static final String[] catInsertArray = new String[13];

catInsertArray[0] = inI + CAT_BUD_TAB + val + "(null, 'Student Loan', 'in', 0.00, 0.00, 0.00, 0, 0 );";

但显然这不起作用,因为它期望 " 标记要包含的字符串的开头。无论如何这会起作用吗?

编辑

不,它不是我关心的 SQL,我只是想将一些文本与来自字符串变量的文本结合起来,并将它们作为一个长字符串保存在一个数组中。可能只是让它变得更加混乱,如果是这样,请忽略此编辑并重新阅读原始问题。

按照建议去掉括号,并用所有相关代码更新上面的代码块。

但 eclipse 仍然说“标记的语法错误,删除这些标记” 并且整行代码都用红色波浪线划线(catInsertArray[0] = ....) p>

如果你能看一下http://pastebin.com/cKa0sKEj

【问题讨论】:

  • 我一头雾水,你到底想达到什么目的?
  • 我很困惑,上面的代码完全有效。您是否想知道实际的 SQL 语句是否有效?
  • 感谢回复,但显然我不清楚,编辑了上面的原始帖子。用户,您说代码完全有效,但是我仍然遇到语法错误。
  • 请提供包含语法错误的完整示例。
  • 我确实收到了令牌错误,但为了能够准确指出问题所在,您能否向我们展示完整的类声明以及您如何实际使用这些东西?我怀疑这是因为您实际上是在尝试在任何方法主体之外执行 catInsertArray[0] 的东西。

标签: java android arrays


【解决方案1】:

我怀疑您最初的问题是在方法体之外有代码。这个演示类将编译和运行,并让 cmets 指出您可能一直在做的事情与正确的事情。

public class StringTest 
{

    public static final String crT = "CREATE TABLE ";
    public static final String inI = "INSERT INTO ";
    public static final String val = " VALUES ";

    public static final String[] catInsertArray = new String[13];

    // you were probably doing this, which is not allowed in Java because you are writing code outside of a method body or static initializer block
    //catInsertArray[0] = inI + val + "(null, 'Student Loan', 'in', 0.00, 0.00, 0.00, 0, 0 );"; 

    static
    {
         // static initialize your static member
         catInsertArray[0] = inI + val + "(null, 'Student Loan', 'in', 0.00, 0.00, 0.00, 0, 0 );"; 
    }

    public static void main(String [] args)
    {
        // You can put code in a method
        //catInsertArray[0] = inI + val + "(null, 'Student Loan', 'in', 0.00, 0.00, 0.00, 0, 0 );"; 

    }
}

根据您的新评论 - 您的 pastebin 链接中的代码存在一些问题。我有一件事是为什么你在DatabaseConstants 类中声明一个嵌套接口?这似乎没有必要,因为您正在为常量创建一个类。

此外,您仍然遗漏了 static initializer block 以将内容放入您的 String 数组中。请参阅下面的代码。

package com.geistware.studentbudgetapp;

import android.provider.BaseColumns;

public class  DatabaseConstants {

    //Variables for DDL statements and such
    public static final String crT = "CREATE TABLE ";
    public static final String inI = "INSERT INTO ";
    public static final String val = " VALUES ";

    //Table Names
    public static final String CAT_BUD_TAB = "CAT_BUD_TAB";
    public static final String TWO_WEE_TAB = "TWO_WEE_TAB";

    //columns from the category_budget_table
    public static final String CAT_ITEM = "CAT_ITEM";
    public static final String IN_OUT = "IN_OUT";
    public static final String BUDGET_AMOUNT = "BUDGET_AMOUNT";
    public static final String ACTUAL_AMOUNT = "ACTUAL_AMOUNT";
    public static final String AMOUNT_STRAYED = "AMOUNT_STRAYED";
    public static final String OVERBUDGET_TF = "OVERBUDGET_TF";
    public static final String AUTOSPEND_TF = "AUTOSPEND_TF";

    //Initial DDL Statements and Initial INSERT statements to populate table
    public static final String createCATBUDTAB = (crT + CAT_BUD_TAB + 
            "(_id INTEGER PRIMARY KEY, CAT_ITEM TEXT, IN_OUT TEXT, BUDGET_AMOUNT REAL, ACTUAL_AMOUNT REAL, AMOUNT_STRAYED REAL, OVERBUDGET_TF INTEGER, AUTOSPEND_TF INTEGER);");
    public static final String createTWOWEETAB = (crT + TWO_WEE_TAB + 
            "(_id INTEGER PRIMARY KEY, SUB_CAT_ITEM TEXT, CAT_ITEM TEXT, COST REAL, ESSENTIAL_TF INTEGER, CURRENT_LAST TEXT, WEEK_ID INTEGER);");

    public static String[] catInsertArray = new String[13];

    // you still need to to put this code into a static initializer block
    static
    {
        catInsertArray[0] = inI + CAT_BUD_TAB + val + "(null, 'Student Loan', 'in', 0.00, 0.00, 0.00, 0, 0 );";
    }

}

但是,对于常量列表之类的内容,我更喜欢使用 enumeration,但希望这能让您走上正确的轨道,至少获得一个有效的构建。

【讨论】:

  • 我尝试按照您的建议进行设置,但我认为我仍然遗漏了一些东西,因为我仍然无法做到无误,如果您有这个类的粘贴箱的链接,我有一个链接请好心看看它并告诉我应该如何设置它? pastebin.com/cKa0sKEj
  • 实际上,在进一步摆弄之后,您似乎是对的,现在我的错误消息只是无法找到变量,这当然很有意义,因为它们不是全局的!我真傻。现在我只需要在那个接口方法中解决我的我需要它们(按照指南)..如果你不知道为什么有必要拥有它会很棒,如果不担心,你已经回答了我的问题!
  • @Holly,我认为您不需要将它们包装在界面中,但我不知道您所遵循的指南的完整上下文。我的编辑从您上面的链接中删除了代码。
  • 感谢您抽出宝贵时间帮助我找到我愚蠢问题的根源,现在一切都很好:)
【解决方案2】:

为什么需要区分 SQL 的各个部分?

您可以只使用 StringBuffer/StringBuilder 来连接您需要的位,记住在使用时转义引号。

【讨论】:

    【解决方案3】:

    如果变量的值也是字符串,你可以这样做。请记住,数组位置只是一个容器。

    但是,你没有调用方法,所以去掉括号。做吧:

    array[position] = stringVariable1 + stringVariable2 + " some other string";
    

    【讨论】:

      【解决方案4】:
      1. 语法上没有错误 建立价值 数组
      2. 你的“操作上”有很多错误 正在做。

        • 您的“CREATE TABLE”、“INSERT INTO”等不是变量,也不应该是常量。将文本拉入常量可能会减少源代码中使用的字符总数,但会增加很多不必要的复杂性。
        • 您的 SQL 语句具有硬编码参数。这就是 PreparedStatement 可能更有用的地方。
        • 通过指定索引来构建数组看起来有点吓人。根据您可能还在做的其他事情,列表可能更有意义。

      【讨论】:

      • 感谢您提供的所有信息,显然我对这一切都很陌生,我一直在学习很多新事物,这只是我尝试应用我学到的东西的尝试改变。看来我可能需要回去谷歌搜索了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2011-03-17
      • 2020-06-04
      相关资源
      最近更新 更多