1

私のテキストファイルには以下が含まれています:

Hello This is a Test
Press Enter to Continue

私は次の配列を持っています:

int StartIndex [] = {1,4,8}
int EndIndex [] = {3,7,11}

String[] VALUES = new String[] {"Sys","Jav","Tes"};

ファイル内の index{1,3} を 'Sys' に、index{4,7} を 'Jav' などに置き換えたいと思います。

私の考えは、ファイル全体を文字列として読み取り、インデックスを渡して VALUES 文字列に置き換えることです。

これどうやってするの ?

コード:

 String[] VALUES = new String[] {"Sys"}; //Correct Solutions

 int [] StartIndex ={4};
 int [] EndIndex ={6};
 while ((line = br.readLine()) != null)   {
                  // Print the content on the console
                  System.out.println (line);
                  StringBuffer buf = new StringBuffer(line);
                  buf.replace(StartIndex[0], EndIndex[0], VALUES[0]);
                  done =buf.toString();
                  System.out.println(done);

予想される出力は次のようになります。

SyslJavhTes is a Test
Press Enter to Continue

少し検索して、これを得ました:

String myName = "domanokz";
char[] myNameChars = myName.toCharArray();
myNameChars[4] = 'x';
myName = String.valueOf(myNameChars);

ファイルを文字列に変換してこの関数を適用すると、うまくいきますか?

4

3 に答える 3

1

問題が解決しました!私はそれをテストしたので、コードは完全に動作します。以前のようにコメントが追加されていないので、理解して学ぶことができます. (他の人が正しい答えを特定するのに役立つ場合は、投票/回答を受け入れてください)。

コード:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
 *
 * @author jtech
 */
public class ReplaceWithIndexes
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = null;
        boolean endMatched = false;
        int startIndex[] = {0,4,8};
        int endIndex[] = {3,7,10};
        int c = 0, c1 = 0, c2 = 0, largestVal_start = 0, largestVal_end = 0, lineCount = 0;
        String line = null, newString = "";
        String[] VALUES = new String[] {"Sys","Jav","Tes"};  

        br = new BufferedReader(new FileReader("C:\\Users\\jtech\\Documents\\NetBeansProjects\\HelpOthers\\src\\textFiles\\AnotherFile.txt"));

        for (int i = 0; i < startIndex.length; i++)
        {
            if (startIndex[i] > largestVal_start)
            {
                largestVal_start = startIndex[i];
            }
        }

        for (int i = 0; i < endIndex.length; i++)
        {
            if (endIndex[i] > largestVal_end)
            {
                largestVal_end = endIndex[i];
            }
        }       


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

                StringBuilder buf = new StringBuilder(line);
                          // Print the content on the console
                System.out.println(line);
                lineCount++;

                    while (c <= largestVal_start)
                    {                       
                       while (c1 <= largestVal_end)
                       {                           
                           if (startIndex[0] == c && endIndex[0] == c1)
                           {
                             buf.replace(startIndex[0], endIndex[0], VALUES[c2]);
                             newString = buf.toString();
                             endMatched = true;
                           }
                           else if (startIndex[1] == c && endIndex[1] == c1)
                           {
                             buf.replace(startIndex[1], endIndex[1], VALUES[c2]);
                             newString = buf.toString();
                             endMatched = true;
                           }
                           else if (startIndex[2] == c && endIndex[2] == c1)
                           {
                             buf.replace(startIndex[2], endIndex[2], VALUES[c2]);
                             newString = buf.toString();
                             endMatched = true;
                           }

                         c1++;
                       }

                      for (int i = 0; i < startIndex.length; i++)
                      {
                        if (c == startIndex[i])
                        {
                            c2++;
                        }

                      }

                      if (endMatched == true || ((c1 <= largestVal_end) == false) )
                      {
                          c1 = 0;
                          endMatched = false;
                      }

                      c++;

                    }

                if (lineCount <= 1)
                {
                  System.out.println("Updated line: " + newString);
                }

            }

    }
}
于 2013-01-11T21:50:40.377 に答える
0

Java では、クラスはことわざのハンマーであり、すべての問題は実際には釘です。3 つの個別のアレイを管理する代わりに、ケースにも 1 つ必要です。

class Replacer {
  private final int start, end;
  private final String replacement;
  Replacer(int start, int end, String replacement) {
    this.start = start; this.end = end; this.replacement = replacement;
  }
  String replace(String in) {
    StringBuilder b = new StringBuilder(in);
    b.replace(start, end, replacement);
    return b.toString();
  }
}

次に、リプレースのリストを作成します。

List<Replacer> replacers = Arrays.asList(
   new Replacer(1, 3, "System"),
   new Replacer(4, 7, "Java"),
   new Replacer(8, 11, "Testing")
);

そしてそれらを各行に適用します:

while ((line = br.readLine()) != null) {
  for (Replacer r : replacers) line = r.replace(line);
  System.out.println(line);
}
于 2013-01-11T12:16:48.893 に答える
0

最も簡単な解決策は次のコードですが、巨大なファイルや多数の置換に対してはおそらく効率的ではありません。

while ((line = br.readLine()) != null) {
    // Print the content on the console
    System.out.println (line);
    StringBuffer buf = new StringBuffer(line);
    for (int i = 0; i < VALUES.length; i ++) {
        buf = buf.replace(StartIndex[i], EndIndex[i], VALUES[i]);
    }
    done = buf.toString();
    System.out.println(done);
}
于 2013-01-11T12:10:36.170 に答える