2012-02-25 97 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, 0]
  8. java .awt.Color [R = 255,G = 0,B = 0]
  9. java.awt.Color中[R = 0,G = 0,B = 255]

从这里,我称之为扫描仪读取我们的文件的行。我只需要找到将[]中的值提取到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

仅供参考,你遗漏了最重要的标签:[tag:java]。 – 2012-02-25 22:34:01

+0

尴尬,在您发布之前修复了大约一分钟:感谢xP – nolasaint 2012-02-25 22:35:29

+0

其实,您的修复与我的意思相反。不要在标题中加入“(Java)”,只需在问题底部的标签中添加[tag:java]即可。我已经解决了这两个问题。 – 2012-02-25 22:38:03

回答

2

最好的方法是更改​​存储格式。至少有两个选项:

  • 逗号分隔值。每行存储r,g,b。例如215,222,213。然后你就可以有line.split(",")使用ObjectOutputStream
+0

分离值像魅力一样工作,谢谢! – nolasaint 2012-02-25 22:45:57

0

我会建议改变格式,以获得值的String[]

  • 连载整个Color阵列。但如果你坚持使用一个正则表达式:

    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)); 
        }