2010-10-04 4 views
3

Je travaillais dessus depuis un certain temps et je n'ai rien trouvé à ce sujet ici, donc j'ai pensé que je posterais ma solution pour la critique/l'utilité.Suppression de caractères "vides" supplémentaires du tableau d'octets et conversion en chaîne

import java.lang.*; 
public class Concat 
{  
    public static void main(String[] args) 
    { 
     byte[] buf = new byte[256]; 
     int lastGoodChar=0; 

     //fill it up for example only 
     byte[] fillbuf=(new String("hello").getBytes()); 
     for(int i=0;i<fillbuf.length;i++) 
       buf[i]=fillbuf[i]; 

     //Now remove extra bytes from "buf" 
     for(int i=0;i<buf.length;i++) 
     { 
       int bint = new Byte(buf[i]).intValue(); 
       if(bint == 0) 
       { 
        lastGoodChar = i; 
        break; 
       } 
     } 

     String bufString = new String(buf,0,lastGoodChar); 
     //Prove that it has been concatenated, 0 if exact match 
     System.out.println(bufString.compareTo("hello")); 
    }  
} 
+0

J'appelle ce pas une vraie question parce que vous avez publié une solution dans la question, demandant essentiellement des réponses comme des questions/critiques. Si vous souhaitez explorer la meilleure façon de faire quelque chose, définissez correctement les exigences sous forme de question, puis publiez une réponse à votre propre question. De cette façon, nous pouvons voter haut/bas ou suggérer des choses dans les commentaires. –

+0

Oui, désolé. Ce n'était pas censé poser une question autant que partager du code. Ce que je trouve souvent conduire à des critiques beaucoup plus constructives. Et, étant une personne non-CS, trouvez que cela aide quand vous ne savez pas comment communiquer ce que vous voulez faire. – user460880

Répondre

9

Je crois que cela fait la même chose:

String emptyRemoved = "he\u0000llo\u0000".replaceAll("\u0000.*", ""); 
+0

Génial, merci. J'ai compris comment remplacer la seconde boucle "for" en utilisant votre suggestion. Mais il faut d'abord décoder correctement le tableau d'octets en spécifiant un charset approprié. – user460880

+1

Ou en ajoutant: new String (content, 0, totalBytesRead, "ISO-8859-1"); Je pense qu'il fait la même chose! – cesards

Questions connexes