/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
check om filnavn er lovligt
Fra : Allan Unnerup


Dato : 29-08-02 12:14

Hvordan finder man nemt ud af om en tegnstreng af typen String kun består af
ascii-tegnene (a-z, A-Z, 0-9, '.' og '_')?

Jeg har brug for at se om en tegnstreng kan være et lovligt filnavn på en
UNIX-platform.

I C er det ret nemt, da der finde standardfunktioner som islower(c),
isupper(c) og lign. Hvordan gør jeg det nemt i Java?

Med venlig hilsen
Allan



 
 
Peter Lind (29-08-2002)
Kommentar
Fra : Peter Lind


Dato : 29-08-02 14:17


"Allan Unnerup" <alu@udkik.dk> wrote
> Hvordan finder man nemt ud af om en tegnstreng af typen String kun består
af
> ascii-tegnene (a-z, A-Z, 0-9, '.' og '_')?
>
> Jeg har brug for at se om en tegnstreng kan være et lovligt filnavn på en
> UNIX-platform.
>
> I C er det ret nemt, da der finde standardfunktioner som islower(c),
> isupper(c) og lign. Hvordan gør jeg det nemt i Java?

Under alle omstændigheder skal du jo lave en løkke, der læser hvert char ud
af strengen, men det skal man vist også i C.
De enkelte chars kan du så undersøge med nogle af de statiske metoder i
Character, for eksempel: isLetter( char ), isLetterOrDigit( char) og alle
mulige andre som du sikkert kan bruge.

Jeg tror det skulle kunne hjælpe dig.

med venlig hilsen
Peter Lind



Allan Unnerup (29-08-2002)
Kommentar
Fra : Allan Unnerup


Dato : 29-08-02 15:19


> Under alle omstændigheder skal du jo lave en løkke, der læser hvert char
ud
> af strengen, men det skal man vist også i C.

Det er også o.k.

> De enkelte chars kan du så undersøge med nogle af de statiske metoder i
> Character, for eksempel: isLetter( char ), isLetterOrDigit( char) og alle
> mulige andre som du sikkert kan bruge.

Nej, isLetter( char ) og isLetterOrDigit( char) returnerer sand, hvis jeg
spørger på fx 'å' og underlige bogstaver i det østeuropæiske charset (Latin
2). Disse tegn er ikke tilladte i et UNIX-filnavn.

Med venlig hilsen
Allan





Steen Jorgensen (29-08-2002)
Kommentar
Fra : Steen Jorgensen


Dato : 29-08-02 17:37

Prøv og kig på følgende kode, hvor der checkes for,
om en String indeholder bestemte tegn. Der vil intet
være i vejen for, at du istedet for at checke for de
enkelte tegn checker for, at de ligner indenfor dine
ønskede intervaller a-z osv. - du skal blot bruge
ascii-værdier for 'a', 'z', 'A' osv.
Håber du kan bruge det?

Mvh. Steen


package utils;

public class EscapeXmlController
{
public EscapeXmlController()
{
}

public static String checkString(String tekst)
{
if(tekst == null || tekst.length() == 0)
return "";


/* der checkes for ', &, <, >, #, /, \ */

StringBuffer tempbuf = new StringBuffer();

for(int taeller = 0; taeller < tekst.length(); taeller++)
{
char c = tekst.charAt(taeller);

if(c == '\'') tempbuf.append("&#039;");
else if(c == '#') tempbuf.append("&#035;");
else if(c == '&') tempbuf.append("&amp;");
else if(c == '<') tempbuf.append("&lt;");
else if(c == '>') tempbuf.append("&gt;");
else if(c == '/') tempbuf.append("&#047;");
else if(c == '\\') tempbuf.append("&#092;");
else tempbuf.append(c);
}


return tempbuf.toString();
}

}






"Allan Unnerup" <alu@udkik.dk> wrote in message
news:94qb9.37502$ww6.2765423@news010.worldonline.dk...
>
> > Under alle omstændigheder skal du jo lave en løkke, der læser hvert char
> ud
> > af strengen, men det skal man vist også i C.
>
> Det er også o.k.
>
> > De enkelte chars kan du så undersøge med nogle af de statiske metoder i
> > Character, for eksempel: isLetter( char ), isLetterOrDigit( char) og
alle
> > mulige andre som du sikkert kan bruge.
>
> Nej, isLetter( char ) og isLetterOrDigit( char) returnerer sand, hvis jeg
> spørger på fx 'å' og underlige bogstaver i det østeuropæiske charset
(Latin
> 2). Disse tegn er ikke tilladte i et UNIX-filnavn.
>
> Med venlig hilsen
> Allan
>
>
>
>



Soren 'Disky' Reinke (29-08-2002)
Kommentar
Fra : Soren 'Disky' Reinke


Dato : 29-08-02 18:17


"Allan Unnerup" <alu@udkik.dk> wrote in message
news:9nnb9.36939$ww6.2749777@news010.worldonline.dk...
> Hvordan finder man nemt ud af om en tegnstreng af typen String kun består
af
> ascii-tegnene (a-z, A-Z, 0-9, '.' og '_')?
>
> Jeg har brug for at se om en tegnstreng kan være et lovligt filnavn på en
> UNIX-platform.
>
> I C er det ret nemt, da der finde standardfunktioner som islower(c),
> isupper(c) og lign. Hvordan gør jeg det nemt i Java?

Hvad med at lave en Stringtokenizer som har alle gyldige tegn som delimiter.
Bed derefter om antal tokens, hvis det ikke er magen til antal tegn må der
være tegn der er ugyldige.

Har ikke testet ideen, men prøv :)

--
Med venlig hilsen
Søren Reinke
http://www.dykkercenterlangeland.dk
Dyk på Seattle i Kristianssand den 19-20 September



Soren 'Disky' Reinke (29-08-2002)
Kommentar
Fra : Soren 'Disky' Reinke


Dato : 29-08-02 18:36

> Har ikke testet ideen, men prøv :)

Nu har jeg testet den og den virker, her er koden:

/*
* Tester.java
*
* Created on 29. august 2002, 19:29
*/

import java.util.*;

/**
*
* @author srr
* @version
*/
public class Tester
{

/** Creates new Tester */
public Tester()
{
String name1="MitFineFilNavn.txt";
String name2="MitIkke~FineFilNavn.txt";

StringTokenizer tokenizer1=new
StringTokenizer(name1,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1
234567890");
StringTokenizer tokenizer2=new
StringTokenizer(name2,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1
234567890");

if(tokenizer1.countTokens()==1)
{
System.out.println(name1+" er gyldig");
}
else
{
System.out.println(name1+" er ikke gyldig");
}

if(tokenizer2.countTokens()==1)
{
System.out.println(name2+" er gyldig");
}
else
{
System.out.println(name2+" er ikke gyldig");
}


}

/**
* @param args the command line arguments
*/
public static void main(String args[])
{
new Tester();
}

}


p.s. Checket skal selvfølgelig smides i en metode :)

--
Med venlig hilsen
Søren Reinke
http://www.dykkercenterlangeland.dk
Dyk på Seattle i Kristianssand den 19-20 September



Morten Primdahl (29-08-2002)
Kommentar
Fra : Morten Primdahl


Dato : 29-08-02 19:29

Allan Unnerup wrote:
> Hvordan finder man nemt ud af om en tegnstreng af typen String kun består af
> ascii-tegnene (a-z, A-Z, 0-9, '.' og '_')?
>
> Jeg har brug for at se om en tegnstreng kan være et lovligt filnavn på en
> UNIX-platform.
>
> I C er det ret nemt, da der finde standardfunktioner som islower(c),
> isupper(c) og lign. Hvordan gør jeg det nemt i Java?
>
> Med venlig hilsen
> Allan
>
>

Jeg ville iterere over strengen og teste:

public static boolean valid(char c) {
return (c >= '0' && c <= '9') ||
(c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z');
}

public static boolean valid(String s) {
for(int i=0; i<s.length(); i++) {
if(!valid(s.charAt(i)))
return false;
}

return true;
}

Jeg vil påstå at det er den billigste (tid/plads) måde at løse problemet
på.

Mvh Morten


Niels Ull Harremoës (31-08-2002)
Kommentar
Fra : Niels Ull Harremoës


Dato : 31-08-02 08:07


"Allan Unnerup" <alu@udkik.dk> wrote in message
news:9nnb9.36939$ww6.2749777@news010.worldonline.dk...
> Hvordan finder man nemt ud af om en tegnstreng af typen String kun består
af
> ascii-tegnene (a-z, A-Z, 0-9, '.' og '_')?

Den korteste løsning er nok

if ( new org.apache.regexp.RE("[^a-zA-Z0-9_\.]").match(filename) ) {
// Invalid filename
.....
}

Niels



Soren 'Disky' Reinke (31-08-2002)
Kommentar
Fra : Soren 'Disky' Reinke


Dato : 31-08-02 08:47

> "Allan Unnerup" <alu@udkik.dk> wrote in message
> news:9nnb9.36939$ww6.2749777@news010.worldonline.dk...
> > Hvordan finder man nemt ud af om en tegnstreng af typen String kun
består
> af
> > ascii-tegnene (a-z, A-Z, 0-9, '.' og '_')?
>
> Den korteste løsning er nok
>
> if ( new org.apache.regexp.RE("[^a-zA-Z0-9_\.]").match(filename) ) {
> // Invalid filename
> .....
> }

Så ville jeg nu bruge den regexp der er i JDK 1.4 istedet for andres
klasser.

Gad vide hvordan regexp'ere performer ? har nogen undersøgt det ?

--
Med venlig hilsen
Søren Reinke
http://www.dykkercenterlangeland.dk
Dyk på Seattle i Kristianssand den 19-20 September



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste