|
| 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("'");
else if(c == '#') tempbuf.append("#");
else if(c == '&') tempbuf.append("&");
else if(c == '<') tempbuf.append("<");
else if(c == '>') tempbuf.append(">");
else if(c == '/') tempbuf.append("/");
else if(c == '\\') tempbuf.append("\");
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
| |
|
|