Получение значений из строки - PullRequest
0 голосов
/ 26 февраля 2012

Я делаю простую программу рисования и застрял в получении определенной части строки.Вот в чем проблема - когда я сохраняю изображение с 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]

Отсюда я вызываю сканер, чтобы прочитать строки нашего файла.Мне просто нужно найти лучший способ извлечь значения из [] в строку.Я пытался использовать токенизатор безрезультатно, все еще застрял с избытком строк.Я пытался манипулировать персонажами, но снова не получилось.Каков наилучший способ извлечения данных из наших скобок?И было бы проще сохранить отдельные значения r = xxx, b = xxx, g = xxx в строку []?Спасибо, и вот источник, который у меня пока есть:

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

Кроме того, игнорируйте мои грязные записи.

Ответы [ 2 ]

2 голосов
/ 26 февраля 2012

Лучший способ - изменить формат хранилища.Минимум два варианта:

  • значения, разделенные запятыми.Храните r,g,b в каждой строке.Например 215,222,213.Тогда у вас может быть line.split(",") для получения String[] значений
  • для сериализации всего массива Color с использованием ObjectOutputStream
0 голосов
/ 26 февраля 2012

Я бы посоветовал изменить формат. Но если вы настаиваете на использовании одного регулярного выражения:

    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));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...