2012-02-25 14 views
0

私は簡単なペイントプログラムを作成していて、文字列の特定の部分を取得することに固執しています。 ここに問題があります - 9パネルイメージを保存すると、各パネルのRBG値が.txtファイルに保存されます。例:文字列から値を取得する

  1. をjava.awt.Color [R = 0、G = 0、B = 0]
  2. をjava.awt.Color [R = 255、G = 255、B = 255]
  3. java.awt.Color [r = 255、g = 0、b = 0]
  4. java.awt.Color [r = 0、g = 0、b = 255]
  5. java.awt.Color [r = 0、g = 0、b = 0]
  6. java.awt.Color [r = 255、g = 255、b = 0]
  7. java.awt.Color [r = 255、g = 255、b = 0]
  8. javaここから.awt.Color [R = 255、G = 0、B = 0]
  9. をjava.awt.Color [R = 0、G = 0、B = 255]

、Iが呼び出しますスキャナがファイルの行を読み取るようにします。私は[]内の値をStringに抽出する最良の方法を見つける必要があります。私はトークン化ツールを使用して無駄にしようとしましたが、それでも余分な文字列に悩まされています。私は文字を操作しようとしましたが、もう一度失敗しました。私たちの括弧でデータを抽出する最良の方法は何でしょうか?個々のr = xxx、b = xxx、g = xxxの値をString []に格納する方が簡単でしょうか?ありがとう、ここに私がこれまで持っているソースがあります:

import java.awt.Color; 
import java.io.*; 
import java.lang.*; 
import java.util.*; 
//when finished, organize imports (narrow down what imports were used) 

public class SaveLoad { 

private boolean tryPassed, tryPassed2; 

private Formatter x; 
//final String[] rawData; will be where the rgb raws are stored 

private Scanner xReader; 

public void save(Color[] c, String s) { 
    //s is the filename 
    int counter = c.length; 

    //Tries to create a file and, if it does, adds the data to it. 
    try{ 
     x = new Formatter(s+".txt"); 
     tryPassed = true; 
     while(counter>0) { 
      x.format("%s. %s\n", (c.length-(counter-1)), c[counter-1]); 
      counter--; 
     } 
     x.close(); 
    }catch (Exception e){ 
     e.printStackTrace(); 
     tryPassed = false; 
    } 
} 

//load will take paramaters of a filename(string); NOTE:::: make the file loaded specify an appendix (ex] .pixmap) 
//MAYBE add a load interface with a jDropdownmenu for the filetype? add parameter String filetype. 
public void load(String s, String filetype) { 
    //loads the file and, if successful, attempts to read it. 
    try{ 
     xReader = new Scanner(new File(s+filetype)); 
     tryPassed2 = true; 
    }catch(Exception e){ 
     e.printStackTrace(); 
     tryPassed2 = false; 
     System.out.println(s+filetype+" is not a valid file"); 
    } 
    while(xReader.hasNext()&&tryPassed2==true) { 
     String inBrackets = xReader.next().substring(17); 
     System.out.println(inBrackets); 
    } 
} 
} 

また、私の面倒な表記を無視してください。

+0

FYI、最も重要なタグ[tag:java]を除外しました。 –

+0

あなたが投稿する前に恥ずかしがり、約1分後に修正しました:SありがとうxP – nolasaint

+0

実際、あなたの修正は私の意図とは反対です。タイトルに「(Java)」を追加するのではなく、質問の末尾にあるタグに[tag:java]を追加するだけです。私はすでに両方を修正しました。 –

答えて

2

最善の方法は、保存形式を変更することです。少なくとも2つのオプション:

  • カンマ区切りの値。各行にr,g,bを格納します。例えば、215,222,213。その後、私はフォーマットを変更するために助言するObjectOutputStream
+0

分離値は魅力のように働いた、ありがとうトン! – nolasaint

0

を用いて全Color配列をシリアライズString[]

  • 値のを取得するために line.split(",")を持つことができます。しかし、あなたが正規表現を使用するとしたら、

    String st = "java.awt.Color[r=0,g=0,b=0]"; 
        Pattern p = Pattern.compile("java.awt.Color\\[r=(.*),g=(.*),b=(.*)\\]"); 
    
        Matcher m = p.matcher(st); 
    
        if (m.matches()) { 
         System.out.println("r=" + m.group(1)); 
         System.out.println("g=" + m.group(2)); 
         System.out.println("b=" + m.group(3)); 
        } 
    
    関連する問題