Avatar billede morphix Nybegynder
14. januar 2003 - 11:43 Der er 13 kommentarer og
2 løsninger

char array to string uden fejl?

ok jeg har et char array:
char []test = {'s','p','a','s','s','e','r'};
System.out.println("test:" + test.toString());
for det meste giver det et korekt resultat, men for spasser giver det strengen: [C@2acc65

Hvorfor, og hvad kan jeg gøre for at få den rigtige streng??
det samme gør sig gældene for char []test = {'k','e','n','n','e','t','h'};
nogen ideer???
Avatar billede Slettet bruger
14. januar 2003 - 11:47 #1
Du skal gøre noget ala

char[] test = {'s','p','a','s','s','e','r'};
String str = new String(test);
System.out.println("test:" + str);
Avatar billede morphix Nybegynder
14. januar 2003 - 11:51 #2
mercur8:
det har jeg prøvet det giver det samme resultat...
det underlige er at det virker i langt de feleste tilfælde, men der er lige et par untagelser... som "spasser" og "kenneth",
Det underlige er at jeg ikke får nogle fejl bare et forkert resultat...
Avatar billede arne_v Ekspert
14. januar 2003 - 11:52 #3
Mercur's svar er korrekt !
Avatar billede Slettet bruger
14. januar 2003 - 11:53 #4
prøv følgende i stedet:

char []test = {'s','p','a','s','s','e','r'};
System.out.println("test:" + new String(test));
Avatar billede arne_v Ekspert
14. januar 2003 - 11:54 #5
public class DetVirker {

    public static void main(String[] args) {
        char[] test = { 's', 'p', 'a', 's', 's', 'e', 'r' };
        String str = new String(test);
        System.out.println("test:" + str);
    }
}

virker altså !
Avatar billede Slettet bruger
14. januar 2003 - 11:55 #6
char[] test = {'s','p','a','s','s','e','r','\0'};

arne_v: Tak for test.
Avatar billede carstenknudsen Nybegynder
14. januar 2003 - 11:57 #7
Det skal virke at lave new String(char[]).
Den udskrift du får der ser "mærkelig" ud
indeholder information om at der er en
array af char og så er der en hexadecimal
hashcode for objektet.
Avatar billede arne_v Ekspert
14. januar 2003 - 11:59 #8
Den streng "virker" også.

I teknisk forstand.

Men en '\0' virker ikke i Java ligesom den gør i C !
Avatar billede morphix Nybegynder
14. januar 2003 - 12:03 #9
ok her er et kun lidt modificeret eksempel fra sun,
kort og godt er det bare en test, jeg lige lavede for at teste hvordan jeg fik et password fra et JPasswordField...
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class PasswordDemo
{
    static JTextField output = null;

    public static void main(String[] argv)
    {
        final JFrame f = new JFrame("PasswordDemo");
        output = new JTextField("");
        output.setPreferredSize(new Dimension(120,20));
        JLabel label = new JLabel("Enter the password: ");
        JPasswordField passwordField = new JPasswordField(10);
        passwordField.setEchoChar('#');
        passwordField.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e)
        {
                JPasswordField input = (JPasswordField)e.getSource();
                String ds = new String(input.getPassword());
                output.setText(ds);
                char[] password = input.getPassword();
                if (isPasswordCorrect(password))
                {
                    JOptionPane.showMessageDialog(f,
                        "Success! You typed the right password.");
                }
                else
                {
                    JOptionPane.showMessageDialog(f,
                        "Invalid password. Try again.",
                        "Error Message",
                        JOptionPane.ERROR_MESSAGE);
                }
            }
        });

        JPanel contentPane = new JPanel(new BorderLayout());
        contentPane.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
        contentPane.add(label, BorderLayout.WEST);
        contentPane.add(passwordField, BorderLayout.CENTER);
        contentPane.add(output, BorderLayout.EAST);

        f.setContentPane(contentPane);
        f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e) { System.exit(0); }});
        f.pack();
        f.setVisible(true);
    }

    private static boolean isPasswordCorrect(char[] input)
    {
        char[] correctPassword = { 's', 'p', 'a', 's', 's', 'e', 'r' };
        if (input.length != correctPassword.length)
            return false;
        String str ="";
        //for(int i=0;i<input.length;i++)
            str+=input.toString();
        output.setText(str);
        for (int i = 0;  i < input.length; i ++)
            if (input[i] != correctPassword[i])
                return false;
        return true;
    }
}
Avatar billede morphix Nybegynder
14. januar 2003 - 12:04 #10
ups der er mere:
prøv lige at skrive compile overstående eksempel og skriv spasser i pwd feltet...
Avatar billede arne_v Ekspert
14. januar 2003 - 12:08 #11
Det virker hos mig !
Avatar billede arne_v Ekspert
14. januar 2003 - 12:09 #12
Men jeg ville kode det som:

    private static boolean isPasswordCorrect(char[] input)
    {
        String pw = new String(input);
        return pw.equals("spasser");
    }
Avatar billede arne_v Ekspert
14. januar 2003 - 12:10 #13
Nej - OK nu kan jeg se problemet !

Det er i den anden box !
Avatar billede arne_v Ekspert
14. januar 2003 - 12:14 #14
System.out.println(ds);
gør det rigtige men:
                output.setText(ds);
skriver generisk objekt info ud ikke strengen.
Avatar billede arne_v Ekspert
14. januar 2003 - 12:17 #15
output.setText("ABC");
giver præcis samme fejl.

Så det har intet med konvertering char[] -> String at gøre.

Det er et Swing setText problem.
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