0

私はこれに似たファイルを持っています:...

The hotspot server JVM has specific code-path optimizations
# which yield an approximate 10% gain over the client version.
export CATALINA_OPTS="$CATALINA_OPTS -server"
#############HDK1001#############

# Disable remote (distributed) garbage collection by Java clients
# and remove ability for applications to call explicit GC collection
export CATALINA_OPTS="$CATALINA_OPTS -XX:+DisableExplicitGC"

# Check for application specific parameters at startup
if [ -r "$CATALINA_BASE/bin/appenv.sh" ]; then
. "$CATALINA_BASE/bin/appenv.sh"
fi
 #############HDK7564#############
# Disable remote (distributed) garbage collection by Java clients
# and remove ability for applications to call explicit GC collection
export CATALINA_OPTS="$CATALINA_OPTS -XX:+DisableExplicitGC"

「HDK1001」という単語が存在する行から読み取りを開始し、世界「HDK7564」で終了したい

このコードを試してみましたが、制限を行うことができません

public static HashMap<String, String> getEnvVariables(String scriptFile,String config) {
    HashMap<String, String> vars = new HashMap<String, String>();
    try {

        FileInputStream fstream = new FileInputStream(scriptFile);
        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
        String strLine;
        String var= "HDK1001";

        while ((strLine = br.readLine()) != null  ) {

            if (strLine.startsWith("export") && !strLine.contains("$")) {
                strLine = strLine.substring(7);
                Scanner scanner = new Scanner(strLine);
                scanner.useDelimiter("=");
                if (scanner.hasNext()) {
                    String name = scanner.next();
                    String value = scanner.next();
                    System.out.println(name+"="+value);
                    vars.put(name, value);
                }
            }

お願い助けて

4

3 に答える 3

0

あなたのコード例はかなりかけ離れています。すべてのコードを書き直すつもりはありませんが、いくつかの指針を示します。あなたはすでにやっています:

if (strLine.startsWith("export") && !strLine.contains("$"))

これは、現在行っていることではなく、「HDK1001」文字列をテストする必要がある条件です。プログラムにとって重要ではないように思われるときに、「エクスポート」という単語をチェックしている理由がわかりません。

ファイル内の特定の単語で魔法のように開始および終了する方法はありません。目的の最初と最後の行が見つかるまで、最初から開始して行ごとにすべてをチェックする必要があります。その最初の行を見つけたら、目的の最後の行に到達するまで読み続けてから、救済することができます.

于 2013-07-17T18:40:41.933 に答える
0

このコードを試してください。

public static HashMap<String, String> getEnvVariables(String scriptFile,
            String config) {
        HashMap<String, String> vars = new HashMap<String, String>();
        BufferedReader br = null;
        try {
            FileInputStream fstream = new FileInputStream(scriptFile);
            br = new BufferedReader(new InputStreamReader(fstream));
            String strLine = null;
            String stopvar = "HDK7564";
            String startvar = "HDK1001";
            String keyword = "export";
            do {
                if (strLine != null && strLine.contains(startvar)) {
                    if (strLine.contains(stopvar)) {
                        return vars;
                    }
                    while (strLine != null && !strLine.contains(stopvar)) {
                        strLine = br.readLine();
                        if (strLine.startsWith(keyword)) {
                            strLine = strLine.substring(keyword.length())
                                    .trim();
                            String[] split = strLine.split("=");
                            String name = split[0];
                            String value = split[1];
                            System.out.println(name + "=" + value);
                            vars.put(name, value);
                        }
                    }
                }
            } while ((strLine = br.readLine()) != null);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return vars;
    }
于 2013-07-19T02:37:57.463 に答える
0

これは、このタスクを実行できるようにしたい種類のロジックに従う疑似コードです。

flag = false
inside a loop
{
 read in a line
 if( line != #############HDK1001############# && flag == false){  //check to see if you found your starting place
    nothing useful here. lets go around the loop and try again

  else // if i found it, set a flag to true
     flag = true;

  if( flag == true) // am i after my starting place but before my end place?
  {
    if( line == #############HDK1001#############) 
       do nothing and go back through the loop, this line is not useful to us

    else if( line ==  #############HDK7564#############) //did i find my end place?
      flag = false // yes i did, so lets not be able to assign stuff any more

    else // im not at the start, im not at the end. I must be inbetwee. lets read the data and assign it. 
      read in the lines and assign it to variables that you want
 }
于 2013-07-17T19:00:09.150 に答える