String.toString() Java

El método toString() de la clase String es realmente muy implementado en el ámbito Java. Provee un mecanismo simple y conveniente para debugear clases durante el desarrollo. También es muy utilizado para loggear y para pasar mensajes de errores informativos a los constructores de una Exception y a los asserts de los unit tests.
Cuando es usado en estos modos informales, la implementación no viene diseñada, por lo que se debe sobreescribir su implementación heredada y adaptarla a las necesidades del objeto que se quiere imprimir.



Por Ejemplo:
import java.util.*;

public class Car {

  private String fName = "Dodge";
  private int fNumDoors = 2;
  private Date fYearManufactured = new Date();
  private String fColor = "Fuchsia";
  private List fOptions = Arrays.asList("Air Conditioning");

  public static void main(String... aArgs){
    Car car = new Car();
    System.out.println(car);
  }
   
  @Override
  public String toString() {
    StringBuilder result = new StringBuilder();
    String NEW_LINE = System.getProperty("line.separator");

    result.append(this.getClass().getName() + " Object {" + NEW_LINE);
    result.append(" Name: " + fName + NEW_LINE);
    result.append(" Number of doors: " + fNumDoors + NEW_LINE);
    result.append(" Year manufactured: " + fYearManufactured + NEW_LINE );
    result.append(" Color: " + fColor + NEW_LINE);
    //Note that Collections and Maps also override toString
    result.append(" Options: " + fOptions + NEW_LINE);
    result.append("}");

    return result.toString();
  }



Resultado del Ejemplo:
Car Object {
 Name: Dodge
 Number of doors: 2
 Year manufactured: Wed Aug 29 15:49:10 ADT 2007
 Color: Fuchsia
 Options: [Air Conditioning]
}


Esta es una implementación de toString() de Apache Commons para inspeccionar tanto los valores de los atributos como los nombres de estos y generar dinámicamente mediante reflection el String deseado.



Por Ejemplo:

@Override
public String toString() {
    return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}


Bueno si te quedaron dudas, deja tus comentarios...
Saludos!



String Java

Caracteres en Java
¿Qué es un caracter? Un caracter es una letra, un simbolo alfanumerico. Y el estándar internacional que define cuáles son las letras posibles en la computación se llama Unicode. Este estándar enumera todas las letras que se necesitan para todos los idiomas conocidos y le asigna un número, que representa un código, a cada una. La cantidad de letras Unicode es muy grande, y no alcanza un byte para implementar la idea de “caracter” en Java. Para hacer esto se usan dos bytes, lo que le da a Java la posibilidad de representar 65.536 caracteres.
El tipo nativo en Java es char, que puede almacenar un número entre 0 y 65.535. Una serie de caracteres entonces es una serie de estos números.
En un byte el valor máximo almacenable es 255.

Strings en Java
Un string en Java, es una secuencia de chars. Los objetos String en java son inmutables. Todos los métodos de manipulación de strings devuelven un nuevo objeto String. Por ejemplo str.trim() en otro lenguaje modificaría str, quitándole espacios por delante y por detrás. No es así en Java. Este código no hace lo que un programador naïve podría llegar a pensar:
 
void saludar(String str)
{
 str.trim();
 System.out.println("Hola, " + str + "!");
}

Lo que está pasando en este pedacito de codigo es que la línea del trim crea un nuevo String. Este nuevo string es desechado, ignorado, descartado, al no ser asignado a ninguna variable. Luego, se usa str, que es exactamente el mismo que fue pasado originalmente como parámetro (o sea que el trim termina no teniendo ningún efecto). El código correcto sería:
 
void saludar(String str)
{
 str = str.trim();
 System.out.println("Hola, " + str + "!");
}

¿Por qué a los diseñadores de Java se les ocurrió hacer algo tan raro? Es por eficiencia y seguridad. Supongamos que existe un método “change()” que sí modifica al objeto. Supongamos también que tenemos una clase nuestra, con un campo privado llamado “nombre”. No queremos permitir que nadie por fuera de la clase cambie el “nombre”. Por eso hacemos un método getNombre() que devuelve ese campo, y no hacemos ningún “setNombre()”. Ahora, si existe “change()”... ¿qué nos impide hacer o.getNombre().change("Jorge");? La única forma de evitar esto sería que getNombre() no devuelva el campo nombre, sino que construya un nuevo objeto, una copia, cada vez que se lo invoca. Eso sería más lento y ocuparía más memoria.
El diseño actual de los strings de Java permite que en un momento dado de la ejecución de una aplicación, un mismo objeto String pueda estar siendo referido desde cientos de clases que no tienen relación entre sí, y sin que esto represente una violación de “seguridad” para ninguna de ellas.
Todo esto no es una cuestión teórica, es necesario saberlo al programar en Java. Supongamos que tenemos todo el texto de una novela en una variable de tipo String. Cientos de miles de letras. Queremos añadirle “© 2008” al final:
 
novela = novela + "© 2008";

Ahora bien, el objeto novela original... es desechado! Su contenido es copiado a uno nuevo, que además tiene el texto añadido. Copiar cientos de miles de caracteres... no es algo muy eficiente. Bueno, si lo hacemos una sola vez puede que no nos demos cuenta... pero... si nos están envíando la novela letra por letra?
 
String novela = "";
 while(true)
 {
  char letra;
  letra = damePróximaLetraDeLaNovela();
  if( letra == null )
   break;
  novela = novela + letra; // auch!
 }

Imaginemos que este programa es una persona. Es un laborioso copiador de novelas. Muy laborioso. Cada vez que aparece una nueva letra que anotar... copia todo lo que había escrito hasta ese momento en otro lado, kuego añade la letra nueva y posteriormente quema todo su trabajo anterior. ¿Cuántas letras termina escribiendo? Para una novela de cuatro letras escribe primero una, luego dos, luego tres y por último escribe todas las cuatro letras. Para una novela de 100.000 letras escribe... 4.999.950.000 letras! (en general, para una novela de n letras escribe n⋅(n − 1) ⁄ 2 letras).

Una manera de solucionar esto sería ir armando la novela en un array común, un array de char. Claro que los arrays tienen un tamaño fijo, por lo que habría que ir copiando cada tanto el array cuando la capacidad anterior se ve alcanzada. Es decir, si primero estimamos que la novela tendrá 100 letras, al llenarse el array hay que crear uno nuevo de, por ejemplo 200 letras y copiar el contenido que ya tenía el viejo de 100.
Como se ve, es necesaria toda una lógica. Java tiene una clase que implementa internamente esta lógica. Una clase que encapsula, encierra, precisamente el manejo de un array que se va extendiendo, y en el que además podemos cambiar las letras del medio. Esta clase es StringBuilder, y debe considerársela como un laboratorio de Strings. Un StringBuilder es el útero en el que un String se puede ir gestando, creciendo, armándose. Al final, el método toString() nos da el String listo para consumo humano (o cibernético, bah).

El código que recibe la novela se vería entonces así:
 
StringBuilder sb = new StringBuilder();
 while(true)
 {
  char letra;
  letra = damePróximaLetraDeLaNovela();
  if( letra == null )
   break;
  sb.append(letra); // muy bien!!! =)
 }
 String novela = sb.toString();

Antes de que apareciera StringBuilder se usaba StringBuffer, la diferencia es que la segunda permite ser utilizada desde varios threads a la vez (cosa inútil que la hace más lenta).
Un detalle interesante extra: Hay algo más que Java puede hacer sólo porque los Strings son inmutables. Cuando obtenemos un “substring”, es decir, cuando extraemos una sección de un string, Java no copia las letras. El substring es un nuevo objeto sí, pero que apunta internamente al mismo array. Es decir que novela.substring(1000, 1010) da un String que tiene los caracteres del 1000 al 1009, pero para obtenerlo Java no copió las cientos de miles de letras! Esto no podría hacerse si el String original pudiera ser cambiado, ya que el cambio podría estar afectando a la sección.

Strings y otros objetos

Una de las características que define a un lenguaje de programación es como se relacionan los strings con el resto de los tipos. En algunos lenguajes hay una conversión automática, desde y hacia strings. En esos lenguajes un valor numérico se convierte siempre automáticamente en string cuando se necesita, y un string se hace número cuando se opera matemáticamente con él. En Java estas conversiones son muy restringidas.
Para los tipos fundamentales (int, float, char, boolean) Java genera atomáticamente una representación String. Es así como podemos escribir System.out.println("Tengo " + edad + " años.");. El camino inverso no se permite. Si se tiene una variable String edadStr, no se puede directamente compararla con 18 (un valor “entero”). Para convertir un string en número se usa la función Integer.parseInt(). Es lo mismo para cada uno de los tipos fundamentales (Float.parseFloat(), Boolean.parseBoolean(), etc).
Por otra parte, los objetos (es decir, todo lo que no es un tipo fundamental) proveen una manera estándar de “convertirse” a Strings. Muchas partes de Java que necesiten una versión String de un objeto invocarán al método toString(). Como este método está definido en Object, y todos los objetos extienden Object, este método está presente siempre. Muchas de las clases que vienen con Java ya implementan correctamente este método: La clase Date lo implementa devolviendo un string con la fecha, las clases que almacenan números (Integer, BigInteger, Float, etc.) devuelven el número convertido a string. La clase String también implementa el método toString()... y... obviamente... devuelve this =), es decir, se devuelve el mismo objeto sobre el que se invoca el método.

Si uno crea una nueva clase, muchísimas veces tiene sentido implementar correctamente un método toString. Por ejemplo, esta sería una implementación adecuada en una clase NúmeroComplejo:
 
class NúmeroComplejo
{
 double i, r;

 // más métodos, constructores, etc...
 
 public String toString()
 {
  return i + "i+" + r;
 }
}

Set to List: Java

El siguiente código te da un ejemplo sobre como Convertir un Set en List. Se hace simplemente creando una nueva instancia de List y pasandola a un nuevo Set como argumento del constructor.
 
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Main {
  public static void main(String[] args) {
    Set set = new HashSet();
    set.add("A");
    set.add(new Long(10));
    set.add(new Date());

    List list = new ArrayList(set);
    for (int i = 0; i < list.size(); i++) {
      Object o = list.get(i);
      System.out.println("Object = " + o);
    }
  }
}

StringUtils.abbreviate

public static String abbreviate(String str, int maxWidth)

Abrevia una cadena con puntos suspensivos. Esto transformará " El veloz murciélago hindú comía feliz cardillo y kiwi" en " El veloz murciélago..."

Especificamente:

•    Si str es menor que maxWidth caracteres de largo, devuelve ese mismo String.
•    Sino lo abrevia en (substring(str, 0, max-3) + "...").
•    Si maxWidth es menor que 4, arroja una IllegalArgumentException.
•     En ningún  caso se devolverá una cadena  de longitud superior a maxWidth.

StringUtils.abbreviate(null, *)      = null
StringUtils.abbreviate("", 4)        = ""
StringUtils.abbreviate("abcdefg", 6) = "abc..."
StringUtils.abbreviate("abcdefg", 7) = "abcdefg"
StringUtils.abbreviate("abcdefg", 8) = "abcdefg"
StringUtils.abbreviate("abcdefg", 4) = "a..."
StringUtils.abbreviate("abcdefg", 3) = IllegalArgumentException


Parameters:
     str - el String a chequear, puede ser null
     maxWidth – longitude maxima del String resultante, tiene que ser de al menos 4 caracteres de longitud
Returns:
     String abreviado, null si el input fue un null String
Throws:
     IllegalArgumentException – si el largo es muy pequeño

Ejemplo de StringUtils.abbreviate

/*
1) Abbreviate Once upon a time >>>Once upon... * */

import org.apache.commons.lang.StringUtils;

public class StringUtilsTrial {
  public static void main(String[] args) {
    // String can be max 12 chars including the ...
    System.out.println("1) Abbreviate Once upon a time >>>"
        + StringUtils.abbreviate("Once upon a time "12));

  }
}

Array en Java

Un array es una estructura de datos que nos permite almacenar un conjunto de datos, siendo este conjunto siempre del mismo tipo.

Caracteristicas de los Arrays en Java
  • Un array en Java puede guardar cualquier tipo de dato, tanto datos de tipo primitivo como objetos de cualquier tipo.
  • El tipo de dato Array en Java es, a su vez, un objeto.
  • Una variable de tipo Array en Java se declara usando corchetes [], de la siguiente manera:
        tipo_del_array[] nombre_de_la_variable

       Por ejemplo,

 
        int[] numeros;
        Persona personas[];


  • La variable almacena la referencia al objeto Array que esta declarado en memoria.
  • Para crear una instancia del objeto Array, se usa el operador new de la siguiente manera:
        new tipo_del_array[cantidad_de_elementos]

       Por ejemplo,

        int[] numeros = new int[1000];
        Persona personas[] = new Persona[200];

  • Los arrays se numeran desde el elemento cero (primer elemento) hasta el n-1 (último elemento). O sea, si tenemos un array de 50 elementos, el primero sería el "0" y el último sería el "49".
  • El acceso a un elemento especifico del Array se hace de la siguiente manera:

       Por ejemplo, para intentar leer el elemento en la posicion 9.

        int nroPosNueve = numeros[8];
        Persona personaPosCuarenta = personas[39];

       Por ejemplo, para cargar o sobreescribir un nuevo valor u objeto en una posicion especifica.

        numeros[8] = 222;
        personas[39] = new Persona("pepe","argento");

Longitud de un Array en Java
El objeto Array posee un atributo llamado "length" (variable de solo lectura) que nos devuelve el número de elementos que posee el array.

Por ejemplo, para saber cuantas posiciones hay en un array:

      int cantValores = numeros.length;
      int cantPersonas = personas.length;

Esto sirve para mostrar el contenido de cada posición del array.

For Java, Como Recorrer un Array en Java

Por ejemplo,

       Persona personas[] = new Persona[5];
       personas[0] = new Persona("pepe","argento");
       personas[1] = new Persona("moni","argento");
       personas[2] = new Persona("coqui","argento");
       personas[3] = new Persona("paola","argento");
       personas[4] = new Persona("fatiga","argento");

       for (int i=0; i < personas.length; i++) {
           System.out.println( "Nombre y apellido: " +
               personas[i].getNombre() + " " +
               personas[i].getApellido() );
       }

y la salida por consola sería:

       Nombre y apellido: pepe argento
       Nombre y apellido: moni argento
       Nombre y apellido: coqui argento
       Nombre y apellido: paola argento
       Nombre y apellido: fatiga argento


:

Java Script

Java Script es un lenguaje de programación interpretado. Se define como orientado a objetos, basado en prototipos, imperativo, débilmente tipado y dinámico.
Se usa tradicionalmente en páginas web HTML para hacer operaciones en el lado del cliente, sin acceso a funciones del servidor.
Java Script tiene una sintaxis muy similar al lenguaje C, aunque tiene nombres y convenciones del lenguaje de programación Java. Sin embargo Java y Java Script no están relacionados y tienen semánticas y propósitos diferentes.
Todos los navegadores modernos interpretan el código Java Script dentro de las páginas web.
Java Script se interpreta en el agente de usuario, al mismo tiempo que las sentencias van descargándose junto con el código HTML.

A continuación les presentamos un conjunto de recursos muy útiles para introducirse al mundo Java Script. Disfrutenlo!! y no duden en preguntarnos.


Introducción a Java Script (Wikipedia)

Tutorial de Java Script (W3School)

Ejemplos de Java Script (java2s)


Bueno ahora tienen para leer un rato jeje :)

Flash Player

Estás buscando la última versión del Flash Player ??
Sigue esta URL del sitio oficial de Adobe Flash Player y  podrás descargar la ultima versión:

Flash Player click aqui

Java Collection Framework: ArrayList

Las aplicaciones suelen necesitar almacenar un conjunto de datos en un único objeto. Los arrays son útiles para esto, pero algunas veces necesitamos incrementar o reducir dinámicamente el número de elementos del array, o hacer que guarde diferentes tipos de datos, cosa que no se puede hacer en un aray.


Para esta clase de conjuntos podemos usar la clase ArrayList del paquete java.util.

Un ArrayList guarda tantos objetos como necesitemos agregarle.
ArrayList tiene varios constructores y dependiendo de cómo necesitemos construir el ArrayList, podemos invocar cualquiera de ellos. Los siguientes dos constructores son los mas comunes de uso:
  • ArrayList() crea un ArrayList con capacidad cero por defecto, pero crecerá según le vayamos añadiendo:
    ArrayList arrList = new ArrayList()
  • ArrayList(int capacidadInicial) construye un ArrayList vacío con una capacidad inicial definida por el usuario. Util para optimizar la asignación de memoria:
    ArrayList arrListCustom = new ArrayList(20);
Un ArrayList contiene solamente las referencias a los objetos internos. No se puede almacenar tipos primitivos como double , long , o float. Para esto usamos un wraper (envoltura), como se desmuestra abajo. Para añadir objetos al ArrayList , llamamos a sus métodos con el operador punto:

      //agregar un String
      arrList.add("Java Technology Book");

      //
agregar un double en una clase wrapper
     
arrList.add(new Double(50.00)); 

      //imprime el tamaño del ArrayList
      System.out.println(
arrList.size() ); 

Si necesitamos circular a través de los elementos del ArrayList , usamos la clase Iterator y sus métodos hasNext y next :

               Iterator alIt = al.iterator(); 
      while (alIt.hasNext()) { 
          System.out.println(alIt.next() + " "); 
      } 

ArrayList es una de las muchas clases del Collection Framework , que proporciona un conjunto de interfaces y clases bien-diseñados para almacenar y manipular grupos de datos como una sola unidad, una coleccion.

Java: Convertir imagen a array de bytes, Convertir array de bytes a imagen

There are many situations where we need to convert an image to a byte array. The following are the java code for converting an image to a byte array, and then convert byte array back to image.

package images;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.imageio.ImageIO;

public class ByteArrayImage{

    public static void main(String[] args) {
       
        try {

            File file = new File("C:\\images\\origen\\foto1.jpg");
            System.out.println(file.exists() + "!!");
           
            FileInputStream fis = new FileInputStream(file);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            try {
                for (int readNum; (readNum = fis.read(buf)) != -1;) {
                    bos.write(buf, 0, readNum);
                    System.out.println("read " + readNum + " bytes,");
                }
            } catch (IOException ex) {
                Logger.getLogger(ByteArrayImage.class.getName()).log(Level.SEVERE, null, ex);
            }
           
            //bytes is the ByteArray we need
            byte[] bytes = bos.toByteArray();
           
            //////////////////////////////////////////////////////////////////////////////////////////////////////
           
            File newFile= new File("C:\\images\\destino\\imgTest-"+System.currentTimeMillis()+".jpg");
            BufferedImage imag=ImageIO.read(new ByteArrayInputStream(bytes));
            ImageIO.write(imag, "jpg", newFile);
           
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Suerte!!!

Java: convertir un archivo a array de bytes, convertir un array de bytes a un archivo

Me imagino que al venir aca, nesesitaras el codigo de Java para "convertir un archivo a un array de bytes", o, en su defecto, "convertir un array de bytes a un archivo". Esto suele ser usado en algunas aplicaciones de transferencia de datos.


import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
 
public class genFile {
 
    public static void main(String[] args) throws FileNotFoundException, IOException {
        File file = new File("java.pdf");
 
        FileInputStream fis = new FileInputStream(file);
        //System.out.println(file.exists() + "!!");
        //InputStream in = resource.openStream();
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        try {
            for (int readNum; (readNum = fis.read(buf)) != -1;) {
                bos.write(buf, 0, readNum); //no doubt here is 0
                //Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
                System.out.println("read " + readNum + " bytes,");
            }
        } catch (IOException ex) {
            Logger.getLogger(genJpeg.class.getName()).log(Level.SEVERE, null, ex);
        }
        byte[] bytes = bos.toByteArray();
 
        //below is the different part
        File someFile = new File("java2.pdf");
        FileOutputStream fos = new FileOutputStream(someFile);
        fos.write(bytes);
        fos.flush();
        fos.close();
    }
}




Espero que les sirva!!!