Avatar billede mik28 Seniormester
13. juni 2006 - 08:52 Der er 33 kommentarer og
1 løsning

replaceAll metoden

Hej Eksperter,

Jeg har en linie i en fil. Udover det har jeg 2 Vectors hvor den ene indeholder tegn og den anden indeholder hvad det pågældende tegn skal ændres til. Så langt så godt. Jeg troede egenligt at jeg kunne slippe afsted med det her, men jeg kan godt se at den ikke går. kon kommer til at indeholde strengen hvor kun det sidste tegn i Vectoren er ændret. Spørgsmålet er hvordan jeg får ændret alle tegn.

for(int i=0;i<tegn.size();i++){
                        kon  = line.replaceAll((String)tegn.elementAt(i), (String)kode.elementAt(i));
                    }
Avatar billede mik28 Seniormester
13. juni 2006 - 08:57 #1
Det kunne f.x. se således ud

a=gywfuifwuowfugufiweg
b=jrurwhuruhrugh
c=cvvrewver

linien cab skulle så gerne blive til cvvrewvergywfuifwuowfugufiwegjrurwhuruhrugh
Avatar billede mikkelbm Nybegynder
13. juni 2006 - 08:59 #2
Så er jeg ikke helt med? For det du gør der er jo bare at sammensætte de 3 strenge i én. Og der replacer du ikke noget!?
Avatar billede mik28 Seniormester
13. juni 2006 - 09:12 #3
Jo da. Jeg har mine 2 Vectors. De er lavet sådan at tegn og kode passer sammen parvis. Det skulle gerne være sådan at jeg kan have en linie hvis tegn bliver ændret til den kode som nu er blevet bestemt. Spørgsmålet er om jeg overhovedet kan bruge replaceAll.
Avatar billede mikkelbm Nybegynder
13. juni 2006 - 09:20 #4
Ahh... Ja, nu kan jeg se det :)
Avatar billede mikkelbm Nybegynder
13. juni 2006 - 09:23 #5
Men så burde følgende kunne gøre det:

for(int i=0;i<tegn.size();i++)
{
    kon += (String)kode.elementAt(i);
}
Avatar billede mikkelbm Nybegynder
13. juni 2006 - 09:26 #6
Jeg ville dog vælge en anden måde at opbevare det på, hvis altid det er parvis. Brug eventuelt et HashMap:

HashMap<Char, String> map = new HashMap<Char, String>();
map.put ('a', "gywfuifwuowfugufiweg");
map.put ('b', "jrurwhuruhrugh");
map.put ('c', "cvvrewver");

String line = "cab";
String kon = "";
char[] chars = line.toCharArray();
for (char ch : chars)
  kon += map.get (ch);
Avatar billede mik28 Seniormester
13. juni 2006 - 10:00 #7
Jeg skal lige rode lidt med det :-)
Avatar billede mik28 Seniormester
13. juni 2006 - 10:03 #8
Hvorfor er det lige at

    for(int i=0;i<tegn.size();i++){
                    //    kon += (String)kode.elementAt(i);
                       
                    System.out.println(tegn.elementAt(i));
                    } 
bliver kørt igennem 2 gange ?
Avatar billede mikkelbm Nybegynder
13. juni 2006 - 10:35 #9
Det gør den heller ikke!
Medmindre du selv kalder den to gange. Og det kan jeg ikke se ud fra den stump kode...
Avatar billede mik28 Seniormester
13. juni 2006 - 11:56 #10
Okay. Jeg har prøvet at skrive indholdet af Vectorene ud, bare for at være sikker på de indeholder det som jeg forventer. Det skulle de gøre. Jeg har med vilje lavet kodefilen sådan at den i teorien ikke skulle lave om på noget (a=a, b=b o.s.v.) Jeg får dog ikke det forventede resultat. Jeg har en fil med en linie (Jeg gik en tur) Det bliver til nullABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Avatar billede mik28 Seniormester
13. juni 2006 - 11:56 #11
System.out.println(kon);
Avatar billede mikkelbm Nybegynder
13. juni 2006 - 12:11 #12
Det har ikke noget med metoden at gøre, det må være der hvor du indlæser data fra filen. Der er første element null.
Avatar billede mik28 Seniormester
13. juni 2006 - 12:19 #13
Grunden til at det tilsyneladende blev kørt 2 gange var fordi jeg havde fyldt det samme oven i Vectoren. Nu bruger jeg

tegn.removeAllElements();
kode.removeAllElements();

Jeg forstår altså slet ikke hvorfor kon bliver til det den gør?
Avatar billede mik28 Seniormester
13. juni 2006 - 12:23 #14
Klassen ser således ud

import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Konverterfil
{
    private String kon;
   
    public Konverterfil(File f, Vector tegn, Vector kode)
    {
       
        // StringBuffer buffer = new StringBuffer();
        // buffer.append();
        try {
       
            FileReader file = new FileReader("C:/crypt/" + f.getName());
            System.out.println("Filens navn er: "+f.getName());
            BufferedReader buff = new BufferedReader(file);
           
            boolean eof = false;
           
            String line;
            while ((line = buff.readLine()) != null){
                if (line == null)
                    eof = true;
                else
                    for(int i=0;i<tegn.size();i++){
                       
                        kon += (String)kode.elementAt(i);
                    //    System.out.println("kon er: "+kon);   
                          System.out.println("Tegn: "+tegn.elementAt(i)+" Kode: "+kode.elementAt(i));
                        } 
           
            System.out.println("kon er: "+kon);
            }
            buff.close();
           
           
            } catch (IOException e){
                System.out.println("error -- "+ e.toString());
            }
   
           
    }
   
   
}
Avatar billede mik28 Seniormester
13. juni 2006 - 12:27 #15
Filens navn er: hohoho.txt
Tegn: A Kode: A
Tegn: B Kode: B
Tegn: C Kode: C
Tegn: D Kode: D
Tegn: E Kode: E
Tegn: F Kode: F
Tegn: G Kode: G
Tegn: H Kode: H
Tegn: I Kode: I
Tegn: J Kode: J
Tegn: K Kode: K
Tegn: L Kode: L
Tegn: M Kode: M
Tegn: N Kode: N
Tegn: O Kode: O
Tegn: P Kode: P
Tegn: Q Kode: Q
Tegn: R Kode: R
Tegn: S Kode: S
Tegn: T Kode: T
Tegn: U Kode: U
Tegn: V Kode: V
Tegn: W Kode: W
Tegn: X Kode: X
Tegn: Y Kode: Y
Tegn: Z Kode: Z
Tegn: a Kode: a
Tegn: b Kode: b
Tegn: c Kode: c
Tegn: d Kode: d
Tegn: e Kode: e
Tegn: f Kode: f
Tegn: g Kode: g
Tegn: h Kode: h
Tegn: i Kode: i
Tegn: j Kode: j
Tegn: k Kode: k
Tegn: l Kode: l
Tegn: m Kode: m
Tegn: n Kode: n
Tegn: o Kode: o
Tegn: p Kode: p
Tegn: q Kode: q
Tegn: r Kode: r
Tegn: s Kode: s
Tegn: t Kode: t
Tegn: u Kode: u
Tegn: v Kode: v
Tegn: w Kode: w
Tegn: x Kode: x
Tegn: y Kode: y
Tegn: z Kode: z
kon er: nullABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Avatar billede mik28 Seniormester
13. juni 2006 - 12:27 #16
Jeg ville forvente at kon var ho ho ho da det er det som står i filen :-)
Avatar billede mik28 Seniormester
13. juni 2006 - 12:36 #17
Jeg kan da egentligt godt se hvad der sker. Jeg gør jo slet ikke noget ved filen.
Avatar billede mikkelbm Nybegynder
13. juni 2006 - 12:47 #18
Nej, præcis. Du gør ikke noget ved det du læser fra filen...
Avatar billede mik28 Seniormester
13. juni 2006 - 12:53 #19
Det er jo det som er meningen. Jeg vil sammenligne det der står i filen med det som står i tegn og udskifte det med det der står i kode.
Avatar billede mikkelbm Nybegynder
13. juni 2006 - 13:09 #20
Så skal du jo bruge din String "line" til at sammenligne med!
Avatar billede mik28 Seniormester
13. juni 2006 - 13:19 #21
Det var det jeg prøvede at gøre til at starte med
Avatar billede mikkelbm Nybegynder
13. juni 2006 - 14:16 #22
Ja, okay... Jeg tror næsten jeg har den.

Jeg skal lige høre hvorfor det er du smider 2 vectors med ned i metoden? Er du ikke kun interesseret i at få returneret en String der indeholder den nye tekst?
Avatar billede mikkelbm Nybegynder
13. juni 2006 - 14:17 #23
Glem min sidste kommentar.
Avatar billede mik28 Seniormester
13. juni 2006 - 14:20 #24
Jeg synes bare det er fedt du gider hjælpe
Avatar billede mikkelbm Nybegynder
13. juni 2006 - 14:25 #25
Prøv lige at se om følgende ikke kan gøre det:

import java.io.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;

public class Konverterfil
{
    private String kon;

    public Konverterfil(File f, Vector tegn, Vector kode)
    {
        try
        {
            FileReader file = new FileReader("C:/crypt/" + f.getName());
            System.out.println("Filens navn er: "+f.getName());
            BufferedReader buff = new BufferedReader(file);

            String line;
            String kon = "";
            while ((line = buff.readLine()) != null)
            {
                char[] chars = line.toCharArray();
                for (int i = 0; i < chars.length; i++)
                {
                    String value = new String(new char[]{chars[i]});
                    int index = tegn.indexOf (value);
                    if (index >= 0)
                        kon += kode.elementAt (i);
                }
            }
            buff.close();

            System.out.println("kon er: "+kon);
        }
        catch (IOException e){
            System.out.println("error -- "+ e.toString());
        }
    }
}
Avatar billede mik28 Seniormester
13. juni 2006 - 14:30 #26
Filens navn er: hohoho.txt
kon er: ABDEGH
Press any key to continue...
Avatar billede mik28 Seniormester
13. juni 2006 - 14:36 #27
hvis du gider så kan jeg sende hele molevitten til dig.
Avatar billede mik28 Seniormester
13. juni 2006 - 14:38 #28
Jeg kan godt se at det ikke er let når man ikke har det i en sammenhæng
Avatar billede mikkelbm Nybegynder
13. juni 2006 - 15:02 #29
Du kan bare poste der hvor du kalder metoden. Og indholdet af filen.
Avatar billede mik28 Seniormester
13. juni 2006 - 15:28 #30
filen indeholder en linie

ho ho ho

metoden bliver kaldt her

Konverterfil kf = new Konverterfil(f,tegn,kode);
Avatar billede mikkelbm Nybegynder
14. juni 2006 - 07:55 #31
Ja, det havde jeg næsten regnet ud ;)

Men jeg skal jo bruge indholdet af dine to vectors for at teste hvad der går galt for dig.
Avatar billede mik28 Seniormester
14. juni 2006 - 08:16 #32
De indeholder det som jeg postede 13/06-2006 12:27:06 :-)
Avatar billede mikkelbm Nybegynder
14. juni 2006 - 09:03 #33
Følgende virker efter hensigten:

import java.io.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;

public class Konverterfil
{
    public static void main (String[] args)
    {
        Vector tegn = new Vector();
        Vector kode = new Vector();
        tegn.add ("a");
        tegn.add ("b");
        tegn.add ("c");
        tegn.add ("d");
       
        kode.add ("A");
        kode.add ("B");
        kode.add ("C");
        kode.add ("D");
       
        File file = new File ("c:\\java\\text.txt");
       
        new Konverterfil (file, tegn, kode);
    }

    private String kon;

    public Konverterfil(File f, Vector tegn, Vector kode)
    {
        try
        {
            FileReader file = new FileReader(f.getAbsolutePath());
            System.out.println("Filens navn er: "+f.getName());
            BufferedReader buff = new BufferedReader(file);

            String line;
            String kon = "";
            while ((line = buff.readLine()) != null)
            {
                char[] chars = line.toCharArray();
                for (int i = 0; i < chars.length; i++)
                {
                    String value = new String(new char[]{chars[i]});
                    int index = tegn.indexOf (value);
                    if (index >= 0)
                        kon += kode.elementAt (index);
                    else
                        kon += chars[i];
                }
            }
            buff.close();

            System.out.println("kon er: "+kon);
        }
        catch (IOException e){
            System.out.println("error -- "+ e.toString());
        }
    }
}


Jeg havde lavet en lille fejl i for-løkken. Men den er rettet nu.
Avatar billede mik28 Seniormester
14. juni 2006 - 09:32 #34
super cool. Tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Lead Data Platform Architect

Forsvarsministeriets Regnskabsstyrelse

Datadesigner

SOS International

Fagligt ambitiøs Scrum Master