Problemas con un parser
Publicado por Alejandro Frasch (2 intervenciones) el 26/03/2007 16:16:38
Hola gente,
Tengo que hacer un pequenio test en java y recien lo estoy aprendiendo. Entre todo lo que he leido (Java in a Nutshell, otro libraco de 1500 paginas, el tutorial de Sun y alguno mas) no he encontrado algo que me indique como solucionar mi problemas.
El codigo que he escrito me da un NullPointerException en un for que les pego a continuacion:
for (User aUser: userArray) {
System.out.println(aUser.toString());
}
No se si el error esta justo aqui, o en el ultimo return de la class. Alguno de Uds. me podria dar una manito?
A continuacion todo el codigo de parser.java...el de User.java, que es tan solo un objeto, esta bien
Desde ya muy agradecido por cualquier ayuda.
Aca va el codigo:
/**
* @author alefra_2
*
*/
public class Parser{
static String[] linesToParse = { "#Special Users", "[user:sam]", "real_name=Sam Knight", "character_name=coolsam", "character_age=45", "#Normal Users", "[user:tom]", "real_name=Tom Flowers", "character_name=tomtom", "character_age=8"};
static int lineNbrBeingProcessed; // puntero al lines
static int currentUser = 0; // puntero a los users
/**
* @param userArray
* @param newUser
* @return
*/
public static User[] addUserToArray (User[] userArray, User newUser) {
User[] newUserArraya = new User[userArray.length + 1];
for(int i =0 ; i < userArray.length ; i ++) {
newUserArraya[i] = userArray[i];
}
newUserArraya[userArray.length] = newUser;
return newUserArraya;
} /* End of User[] addUserToArray */
/**
* @param args
*/
public static void main(String[] args){
User[] userArray =parse(linesToParse);
for (User aUser: userArray) {
System.out.println(aUser.toString());
}
} /* End of main */
/**
* @param linesToParse
* @return
*/
static User[] parse(String[] linesToParse) {
User[] userArray = new User[0];
while(lineNbrBeingProcessed < linesToParse.length){
User user = parseUser();
if(user == null){
return null;
}else{
userArray = addUserToArray(userArray, user);
}
}
return userArray;
} /* End of User[] parse(String linesToParse) */
/**
* @return
*/
public static User parseUser(){
// parsing linesToParse finding the line with #
// at the beginning. This marks the beginning of each user
// Then advance lins one by one, extract whatever is after
// the #, the :, or the =, pack it in a new user object
// return this new user.
if(linesToParse[lineNbrBeingProcessed].length() == 0){
System.out.println("Line Nr. "+lineNbrBeingProcessed+" is empty.");
System.out.println("Please correct the input file");
}else{
if(linesToParse[lineNbrBeingProcessed].indexOf( '#' ) == 0){
User usuario = new User();
int index = linesToParse[lineNbrBeingProcessed].indexOf( "=" );
String userType = linesToParse[lineNbrBeingProcessed].substring( index+2, linesToParse[lineNbrBeingProcessed].length());
usuario.setUserType(userType);
lineNbrBeingProcessed++;
int index1 = linesToParse[lineNbrBeingProcessed].indexOf( ":" );
String userId = linesToParse[lineNbrBeingProcessed].substring( index1+1, linesToParse[lineNbrBeingProcessed].length()-1 );
usuario.setUserId(userId);
lineNbrBeingProcessed++;
int index2 = linesToParse[lineNbrBeingProcessed].indexOf( "=" );
String userName = linesToParse[lineNbrBeingProcessed].substring( index2+1, linesToParse[lineNbrBeingProcessed].length() );
usuario.setRealName(userName);
lineNbrBeingProcessed++;
int index3 = linesToParse[lineNbrBeingProcessed].indexOf( "=" );
String userCharacter = linesToParse[lineNbrBeingProcessed].substring( index3+1, linesToParse[lineNbrBeingProcessed].length() );
usuario.setCharacterName(userCharacter);
lineNbrBeingProcessed++;
int index4 = linesToParse[lineNbrBeingProcessed].indexOf( "=" );
int userAge = Integer.parseInt(linesToParse[lineNbrBeingProcessed].substring( index4+1));
usuario.setCharacterAge(userAge);
return usuario;
}
}
lineNbrBeingProcessed++;
return null;
} /* End of parseUser() */
} /* End of class */
Tengo que hacer un pequenio test en java y recien lo estoy aprendiendo. Entre todo lo que he leido (Java in a Nutshell, otro libraco de 1500 paginas, el tutorial de Sun y alguno mas) no he encontrado algo que me indique como solucionar mi problemas.
El codigo que he escrito me da un NullPointerException en un for que les pego a continuacion:
for (User aUser: userArray) {
System.out.println(aUser.toString());
}
No se si el error esta justo aqui, o en el ultimo return de la class. Alguno de Uds. me podria dar una manito?
A continuacion todo el codigo de parser.java...el de User.java, que es tan solo un objeto, esta bien
Desde ya muy agradecido por cualquier ayuda.
Aca va el codigo:
/**
* @author alefra_2
*
*/
public class Parser{
static String[] linesToParse = { "#Special Users", "[user:sam]", "real_name=Sam Knight", "character_name=coolsam", "character_age=45", "#Normal Users", "[user:tom]", "real_name=Tom Flowers", "character_name=tomtom", "character_age=8"};
static int lineNbrBeingProcessed; // puntero al lines
static int currentUser = 0; // puntero a los users
/**
* @param userArray
* @param newUser
* @return
*/
public static User[] addUserToArray (User[] userArray, User newUser) {
User[] newUserArraya = new User[userArray.length + 1];
for(int i =0 ; i < userArray.length ; i ++) {
newUserArraya[i] = userArray[i];
}
newUserArraya[userArray.length] = newUser;
return newUserArraya;
} /* End of User[] addUserToArray */
/**
* @param args
*/
public static void main(String[] args){
User[] userArray =parse(linesToParse);
for (User aUser: userArray) {
System.out.println(aUser.toString());
}
} /* End of main */
/**
* @param linesToParse
* @return
*/
static User[] parse(String[] linesToParse) {
User[] userArray = new User[0];
while(lineNbrBeingProcessed < linesToParse.length){
User user = parseUser();
if(user == null){
return null;
}else{
userArray = addUserToArray(userArray, user);
}
}
return userArray;
} /* End of User[] parse(String linesToParse) */
/**
* @return
*/
public static User parseUser(){
// parsing linesToParse finding the line with #
// at the beginning. This marks the beginning of each user
// Then advance lins one by one, extract whatever is after
// the #, the :, or the =, pack it in a new user object
// return this new user.
if(linesToParse[lineNbrBeingProcessed].length() == 0){
System.out.println("Line Nr. "+lineNbrBeingProcessed+" is empty.");
System.out.println("Please correct the input file");
}else{
if(linesToParse[lineNbrBeingProcessed].indexOf( '#' ) == 0){
User usuario = new User();
int index = linesToParse[lineNbrBeingProcessed].indexOf( "=" );
String userType = linesToParse[lineNbrBeingProcessed].substring( index+2, linesToParse[lineNbrBeingProcessed].length());
usuario.setUserType(userType);
lineNbrBeingProcessed++;
int index1 = linesToParse[lineNbrBeingProcessed].indexOf( ":" );
String userId = linesToParse[lineNbrBeingProcessed].substring( index1+1, linesToParse[lineNbrBeingProcessed].length()-1 );
usuario.setUserId(userId);
lineNbrBeingProcessed++;
int index2 = linesToParse[lineNbrBeingProcessed].indexOf( "=" );
String userName = linesToParse[lineNbrBeingProcessed].substring( index2+1, linesToParse[lineNbrBeingProcessed].length() );
usuario.setRealName(userName);
lineNbrBeingProcessed++;
int index3 = linesToParse[lineNbrBeingProcessed].indexOf( "=" );
String userCharacter = linesToParse[lineNbrBeingProcessed].substring( index3+1, linesToParse[lineNbrBeingProcessed].length() );
usuario.setCharacterName(userCharacter);
lineNbrBeingProcessed++;
int index4 = linesToParse[lineNbrBeingProcessed].indexOf( "=" );
int userAge = Integer.parseInt(linesToParse[lineNbrBeingProcessed].substring( index4+1));
usuario.setCharacterAge(userAge);
return usuario;
}
}
lineNbrBeingProcessed++;
return null;
} /* End of parseUser() */
} /* End of class */
Valora esta pregunta


0