PROGRAMACIÓN EN JAVA

Francisco Javier Cruz Vílchez

ARREGLOS Y CADENAS

Objetivos:
Al finalizar este capítulo, el alumno aprenderá a:

  • Diferenciar entre un tipo simple y un tipo estructurado.
  • Aprenderá a diferenciar entre un dato primitivo y dato de tipo estructurado.
  • Acceder a los elementos de un vector y de una matriz en java.
  • Inicializar elementos de un arrays
  • Pasar arrays a un método y distinguir paso por valor y paso por referencia.
  • Conocer algoritmos sencillos de ordenación de arrays.

3.1 Definiendo Arreglos


Los arreglos son estructuras de datos de tipo estáticas dado que antes de su utilización necesariamente tenemos que definir el tamaño de estas y no podemos manejar este tipo de asignación en tiempo de ejecución dado que por la misma naturaleza de la estructura no lo permite.

Los arreglos se caracterizan por que guardan datos primitivos que nos permitirán formas estructuras de datos más complejas. En Java los arreglos se definen de la siguiente manera.

class test
public static void main(String args[]){
    int n = new int[5]; //Arreglo de enteros
     flota notas;
     notas = new flota[26]; //Definimos un arreglo tipo float
}

En el ejemplo anterior hemos definido un el arreglo n donde guardamos datos primitivos de tipo entero, cuando definimos un arreglo todas las posiciones del arreglo tienen como dato guardado null a menos que se diga lo contrario.

También tenemos diferentes tipos de declaraciones  de un array :

  1. char cad[], p;

cad es un array tipo char y p es una variable  tipo char

  1. int []v, w;

Tanto v como w son arreglos tipo int.

El tamaño es una constante representada por una variable protegida final.
            final int N=20;

float vector[];
            vector =new float[N];

 

3.2 Subíndices de una array.


Ejemplos :
            int edad = new int[5];
Este array contiene cinco elementos donde el primer elemento es : edad[0]…edad[4].
int [] pesos, longitudes
Declaramos dos array de enteros (no asignamos tamaño).
            Racional [] ra = Racional[5]
Definimos un arreglo de cinco objetos racional

El almacenamiento de los array en memoria se almacena en bloques contiguos. Sí por ejemplo los array

int edades[];
char codigo[];
edades = new int [5];
codigos = new char[5];

tengamos presente que todos los subíndices de los arreglos en java empiezan con cero.

3.3 El tamaño de los array . Atributo length

Java considera el array como un objeto, debido a ello se puede conocer el número de elementos de un array accediendo al campo length. Este campo resulta muy útil cuando se pasa un array a un método.

double [] v= new double[5];
System.out.println(v.length);

double suma (double [] w) {
double suma =0.0;
for (int i=0; i< w.length; i++)
                        s+=w[i];
return s;
}

 

También podemos inicializar un arreglo como en los siguientes casos:
int numeros []= {10,20,30,40,60}
//Definimos un array de 6 elementos y se inicializan.
int n[] ={3,4,5};
//Definimos un array de 3 elementos.

char c[] ={‘L’,’U’,`i`,`s`} //Definimos un array de 4 elementos

presentar un ejemplo de un arreglo donde se ingresan un conjunto elementos de un arreglo .

 

Los array en java se inicializan en cero por defecto en java  como se muestra en el siguiente ejemplo:

int lista[]=new int [10];
for(int j=0; j<=9;j++)
   System.out.println(“\n Lista “+j+”=”+lista[i]);

3.4 ARRAY DE CARACTERES Y CADENAS DE TEXTO.

Java soporta cadenas de texto utilizando la clase String y StringBuffer implantada en el paquete java.lang.

Es importante diferenciar entre un array de caracteres y una cadena de caracteres. Los String son objetos en los que se almacenan las cadenas, tienen diversos constructores y métodos. Los array de tipo char son una secuencia de caracteres, con las mismas caracteristicas que los array de otro tipo.

String mas =”Programador en Java”; // Crea objetos cadena.
Char datos[]={‘F’,’i’,’c’,’h’,’e’,’r’,’o’}; //Definimos un array de 7 elementos.
 
Las cadenas definidas como objetos StringBuffer pueden cambiar la longitud de la cadena y el contenido.

StringBuffer cc = new StringBuffer(“Cadena Variable”);
cc.replace(‘v’,’V’);

La clase String tiene definido un método legth() de la clase String. Una confusión habitual es obtener la longitud de un array con una llamada length(); o a la inversa, obtener la longitud de una cadena con el campo length.

String buf =”Cadena de Oro”;
char acad[] = new char(6);
for(int j=0; j<6; j++)
    acad[j]=(char)’a’;
    acad[j]=(char)’a’+j;
System.out.println(“La longitud de buf =  ”+buf.length());
System.out.println(“La longitud de acad =  ”+buf.length);

 

3.5 COPIA DE ARRAY

Los elementos de un arrays se pueden asignar a otro arrays con bucle que recorra cada elemento, el arrays destino tiene que estar definido con al menos los mismos elementos Así como en el ejemplo.

 

final int N=12;
int v1[]= new int [N],v2[]=new int[N];
for(int i=0; i<N;i++)
  v1[i]=(int)(Math.random()*199+1);
//Los elementos son copiados de v1 a v2.
for(int i=0;i<N;i++)
  v2[i]=v1[i];

 

La forma sintáctica de llamadas al método arraycopy:

System.arraycopy(arrayOrigen,inicioOrigen,arrayDestino,inicioDestino,elementos)

arrayOrigen:

Nombre del array desde el que se va copiar

inicioOrigen:

Posición del array origen desde la se inicia la copia.

arrayDestino:

Nombre  del array en el que se hace la copia

inicioDestino:

Es la posición del array destino donde empieza la copia

Elementos:

Numero de elementos del array origen que se va a copiar.

 

3.6 ARRAY MULTIDIMENSIONALES


Los array multidimensionales son aquellos que tienen más de dimensión y, en consecuencia, más de un índice. Los array más usuales son los de dos dimensiones, conocidos también con el nombre de tablas o matrices. Sin embargo, es posible crear array de tantas dimensiones como requieran sus aplicaciones esto es, tres, cuatro o más dimensiones.

Ejemplos de declaración de tablas:

char pantalla[][]= new char[80][24];
int puestos[][] =new int[10][5];
final int N=4;
double [][]matriz = new double[N][N];

3.6.1 INICIALIZACION DE ARRAY MULTIDIMENSIONALES

Se ha definido una matriz de dos filas  tres columnas cada fila.
O bien en estos casos otros formatos más amigables:

int tabla[][]={{51,52,53},
{54,55,56}};

   {1,2,3,4},
   {5,6,7,8},
   {9,10,11,12}
};

Java trata los arrays de dos o más dimensiones como array de arrays, por ello se pueden crear arrays de dos dimensiones no cuadradas. En los siguientes ejemplos se crean arrays de distintos elementos cada fila.

 

Se ha definido una matriz de dos filas, la primera columnas y las segunda con tres.

int mtb[][]={a,b};

Se ha definido el array a de tres elementos, el b de cuatro elementos y la matriz mtb de dos filas, la primera con tres elementos o columnas, y la segunda con cuatro.

3.6.2 ACCESO A LOS ELEMENTOS DE LOS ARRAY BIDIMENSIONALES.

Ejemplos de inserciones:

Tabla[2][3]=4.5;
Resistencias[2][4]=50;

Ventas=Tabla[1][1];
Dia=semana[3][6];

Ejemplos de Lectura y Escritura de elementos de arrays bidimensionales

int tabla[][] = new int[3][4];
tabla[1][1]=Integer.parseInt(entrada.readLine());
System.out.println(tabla[1][1]+” =”);

Ejemplo de Multiplicar dos Matrices de dos dimensiones.

public class Test1{
  static void MultiplicarPorDosMatriz2D(double[][] x) {
    for (int f = 0; f < x.length; f++) {
      for (int c = 0; c < x[0].length; c++)
        x[f][c] *= 2; }
  }

  public static void main(String[] args)  {
    double[][] m = {{10, 20, 30}, {40, 50, 60}};
    MultiplicarPorDosMatriz2D(m);
    // Visualizar la matriz por filas
    for (int f = 0; f < m.length; f++) {
      for (int c = 0; c < m[0].length; c++)
            System.out.printf("%10.2f", m[f][c]);
System.out.println();
    }
  }
}
Salida por Pantalla
20,00     40,00     60,00
            80,00    100,00    120,00

 

3.6.2. UTILIZACIÓN DE ARRAY COMO PARÁMETROS.

En java, todas las variables de tipo primitivos, double, flota, char, int, bolean se pasan por valor. Los objetos siempre se pasan por referencia. Los array en java se consideran que son objetos y por tanto se pasan por referencia (dirección). Esto significa que cuando se llama a un método o función y se utiliza un array como parámetro, se debe tener cuidado de no modificar el array en una función llamada.

Dadas las declaraciones:

final int Max =100;
double datos[] = new double [Max];

se puede declarar un método que acepte un array de valores double como parámetro. El método SumaDeDatos() tiene la cabecera:

double SumaDeDatos(double w[]);

En la llamada al método SumaDeDatos() el argumento array se pone escribiendo el identificador del array:

SumaDeDatos(datos);

El método SumaDeDatos() no es difícil de escribir. Un simple bucle for suma los elementos del array y una sentencia return devuelve el resultado de nuevo al llamador:

double SumaDeDatos(double w[]){
double suma=0.0;
int n=w.length;
while(n>0)
    suma +=W[--n];
return suma; }

 

3.7 STRINGS.


Los strings (o cadenas de caracteres) en Java son objetos y no vectores de caracteres como ocurre en C.

Existen dos clases para manipular strings: String y StringBuffer. String se utiliza cuando las cadenas de caracteres no cambian (son constantes) y StringBuffer cuando se quiere utilizar cadenas de caracteres dinámicas, que puedan variar en contenido o longitud.

3.7.1 La clase String.


Como ya se ha mencionado, se utilizarán objetos de la clase String para almacenar cadenas de caracteres constantes, que no varían en contenido o longitud.

Cuando el compilador encuentra una cadena de caracteres encerrada entre comillas dobles, crea automáticamente un objeto del tipo String.

Así la instrucción:
System.out.println( “Hola mundo”);
Provoca que el compilador, al encontrar “Hola mundo”, cree un objeto de tipo String que inicializa con el string “Hola mundo” y este objeto es pasado como argumento al método println().

Por la misma razón, también puede inicializarse una variable de tipo String de la siguiente forma:

String s;
s = “Hola mundo”;
o
String s = “Hola mundo”;
Además, por ser String una clase, también puede inicializarse una variable de dicha clase mediante su constructor:
String s;

o
String s = new String(“Hola mundo”);
Se ha mencionado que la clase String sirve para almacenar cadenas de caracteres que no varían, sin embargo es posible hacer lo siguiente:

String s = “Hola mundo”;
s = “El mensaje es: “ + s;

Esto no significa que la longitud de “s” pueda ser variada. Lo que ha ocurrido en realidad es que el compilador ha creado un objeto de la clase String al encontrar “El mensaje es: “, después ha realizado la operación de concatenación de strings entre ese objeto creado y s; y el resultado a sido asignado a un nuevo objeto creado por el compilador; este objeto es asignado a la variable s (el puntero de s apunta al nuevo objeto) y el objeto al que apuntaba anteriormente s ya no tiene ninguna referencia, por lo que el “recolector de basura” liberará la memoria utilizada por el mismo al detectar su inaccesibilidad.

El operador + está sobrecargado y puede concatenar Strings con enteros, StringBuffers, etc.

La siguiente expresión es correcta:
String s = “Quiero”  + 2 + “cafés”;

Puede concatenarse un String con cualquier objeto. El resultado es el String original concatenado al String que devuelve el método toString() que toda clase hereda de la clase raíz Object y que puede estar, o no, redefinido.

Pruébese a pasar como parámetro un objeto de cualquier clase al método System.out.println().
Por ejemplo:

class Clase {
}
class MuySimple {
public static void main(String arg[]) {
Clase c = new Clase();
System.out.println(c);
}
}

Produce la salida:
Clase@1cc731
(Resultado de llamar al método toString() de la clase Clase.)

 

3.7.1.1 Constructores de la clase String.

Construye un string vacío.

Construye un string a partir de un vector de bytes codificados dependiendo de la plataforma (por ejemplo, ASCII), por lo tanto, la longitud del vector no tiene porqué coincidir siempre con la del string.
Ejemplo: byte bytes[]={65,66};
String s = new String(bytes); à “AB”

Construye un string a partir de un vector de bytes codificados dependiendo de la  plataforma. Para ello toma el primer byte que se encuentra en la posición indicada como parámetro y tantos bytes del vector como se indica en el parámetro “cantidad”.
Ejemplo: byte bytes[]={65,66,67,68,69};
String s = new String(bytes, 1 , 3); à BCD

Construye un string inicializado por un vector de caracteres (valor).
Ejemplo: char c[] = {‘H’,’o’,’l’,’a’};
String s = new String( c );

Construye un string inicializado por un subvector de caracteres. El primer
carácter del string será el indicado por el primer entero (posición), teniendo en cuenta que los vectores comienzan por el índice cero. La longitud del string será especificado por el segundo entero (cantidad).
Ejemplo: char c[] = {‘H’,’o’,’l’,’a’};
String s = new String( c , 1 , 2 ); “ol”

Construye un String que es copia del String especificado como parámetro.
Ejemplo: String s = new String(“Hola mundo”);

Construye un nuevo String a partir de un StringBuffer.

 

Lectura de Cadenas.


La clase BufferedReader tiene diversos métodos para la lectura de datos. Al ejecutarse un programa, Java incorpora el objeto System.in asociado con el flujo (stream) de entrada  byte a byte. Además la clase InputStreamReader convierte el flujo de byte en cadenas de caracteres. Esa es la razón de que se cree el objeto entrada(El nombre puede ser cualquiera) para lectura desde el teclado:

BufferedReader entrada= new BufferedReader(
                                       new InputStreamReader(System.in));

El método readLine() es el más utilizado para entrada de datos desde el teclado, pertenece a la clase BufferedReader, devuelve un objeto cadena con los caracteres leídos hasta encontrar la marca de fin de línea. El método devuelve null si encuentra la marca de fin de fichero.

Ejemplo:
El programa que escribe y lee líneas de caracteres y se escriben en pantalla.
 
import java.io.*;
public class EntradaCadenas {
            public static void main(String args[])throws IOException{
                        int ncd =0;
                        String micd;
                        BufferedReader entrada = new BufferedReader(
                                   new InputStreamReader(System.in));
                        System.out.println("Ingrese una cadena de caracteres ;"+
                                   "Termina Crtl+Z");
                        System.out.flush();
                        do{
                                   micd=null;
                                   micd= entrada.readLine();
                                   if(micd !=null){
                                               ncd++;
                                               System.out.println(micd);
                                   }
                        }
                        while (micd !=null);
                        System.out.println("\nNumero de Lineas :"+ncd);
            }
}

Método read()
Java considera la entrada o la salida de datos como un flujo de caracteres. La clase System incorpora los objetos out, in y err que son creados automáticamente al ejecutar el programa. El objeto out está asociado a una salida estándar, el método print() y println() se utiliza con mucha frecuencia para la salida de cadenas de caracteres. El objeto in está asociado con la entrada estándar, tiene  métodos para la lectura de caracteres. El método read() lee un carácter del dispositivo estándar de entrada, normalmente el teclado, y devuelve el carácter leído.
            int read();
El método está sobrecargado para poder leer de la entrada un array de caracteres o un rango de caracteres :

            int read(byte [] dat);
            int read(byte [] dat, int posición, int numCaracteres);

Ejemplo :
El siguiente programa lee un texto desde el teclado, cuenta el número de letras i,j,k,l,m,n (tanto en mayúsculas como minúsculas).

import java.io.*;
public class CuentaCar {
                        public static  void main(String args[])throws IOException {
                        int  car;
                        int cuenta=0;
                        System.out.println("\nIngrese el texto , termina con #");
                        while((car=System.in.read())!='#')
                                   if((car>='i'&&car>='n' )||(car>='I'&&car>='N' )){
                                               ++cuenta;
                                   }
                                  
                        System.out.println("Numero de Ocurrencias : "+cuenta);
            }
}

LONGITUD Y CONCATENACIÓN DE CADENAS


Longitud de una cadena : Método length()
La clase String  tiene definido el método length(), que calcula el número de caracteres del objeto cadena :

String cad ='1234567890'
int i = cad.length();
En estas sentencias asigna 10 a la variable i

Concatenación de cadenas:
 Concatenación de cadmeas con el operador +
String c1 ='Angela';
String c2 ='Paloma';
String c3= c1+c2;
String cd;
cd= 'Musica'+'Clasica';

Concatenación de cadeneas : Método concat()
La clase String tiene definido el método concat() para unir cadenas y devolver un nuevo objeto cadena.
String concat(String);

String dst ='Desconocido';
String org='Rutina';
System.out.println('Concatena = '+dst.concat(org));
System.out.println(“Cadena dst = +dst);// dst no ha cambiado
System.out.println(“Cadena dst = +org);// org no ha cambiado.

Obtención de caracteres de una cadena

Obtención de un carácter : Método charAt()
El método charAt() permite obtener un carácter de una cadena. Tiene como parámetro el índice del carácter a obtener. El índice inferior es el cero, como ocurre en los arrays, y el índice superior length() -1. Si el indice esta fuera de rango el programa envía una excepción un error en tiempo de ejecución.

“ABCDEF”.charAt(0) // Devuelve el carácter ‘A’
String v = new String(“Nuestro Honor”);
System.out.print(v.charAt[0]+ v.charAt[2]+ v.charAt[4]);

En el ejemplo siguiente se determina el número de vocales que tiene una cadena.

public class CnumVocales {

    public static int numVocales(String cadena) {
            int k=0;
            for(int i=0;i<cadena.length();i++)                             
                                   switch(cadena.charAt(i))
                        {
                                   case 'a': case'e': case 'i':case'o': case'u':
                                   case 'A': case'E': case 'I': case 'O': case 'U':
                                   k++;
                        }                      
                        return k;
            }
           
   
public static void main(String [] args){
String mensaje = new String("Universidad Nacional de Piura");

System.out.println("El número de Vocales de la Frase es :"+numVocales(mensaje));
    }   
 }

Dejando propuesto para el alumno que determine el número de vocales de cada tipo tiene una frase ingresada por teclado.

Obtención de un array de caracteres : Métodos getChars()


Con el método getChars(), un rango de caracteres de una cadena se copia en un array de tipo char aunque realmente prefiero implementar mis propia rutina para que realice esta funcionalidad.

En las siguientes sentencias se extraen caracteres de una cadena y se almacenan en un array.

final int M=10;
String bs ='Hoy es un buen día';
char ds[] = new char[M];
bs.getChars(0,2,ds,0); //ds contiene los caracteres  “Ho” en la posición 0 y 1
bs.getChars(4,5,ds,0); // ds contiene los caracteres “puede”en la posición 0…4//
bs.getChars(10,3,ds,5);// los caracteres “ser se copian en las posiciones 5…7” de ds.
bs.getChars(0,bs,length()/2,ds,0); // la mitad de los caracteres de las cadena se copian
// en ds a partir de la posición 0.

Obtención de una subcadena : Método substring()


Una cadena se puede descomponer en subcadenas, el método substring() obtiene una subcadena de la cadena original que se devuelve como otro objeto cadena. El método tiene como argumentos la posición inicial y final; el rango de caracteres obtenido va desde inicial hasta final-1.
String substring(int inicial, int final);

Ejemplo :

String dc ='Terminal Inteligente'
System.out.println(dc.substring(3,8));//minal, caracteres 3…7
System.out.println(dc.substring(9,dc.length()) //”inteligente”

Comparación de cadenas


Dado que las cadenas son objetos que contienen una secuencia de caracteres, la Clase String proporciona un conjunto de métodos que comparan cadenas alfabéticamente. Estos métodos comparan los caracteres de dos cadenas utilizando el código numérico de su representación. Los métodos son:

 

Método compareTo()


Cuando se desea determinar si una cadena es igual a otra, o mayor o menor que otra, debe utilizar el método compareTo() . La comparación siempre es alfabética.
compareTo() compara la cadena que llama al método con la cadena que se pasa como argumento, y devuelve 0 si las dos cadenas son idénticas, un valor menor que cero si la cadena 1 es mayor que la cadena 2, o un valor mayor que cero si la cadena 1 es mayor que la cadena 2 (los términos mayor que  y menor que se refieren a la ordenación alfabética de las cadenas).

int compareTo(cadena 2)

< 0       si         cad1    es menor que              cad2
=0        si         cad1    es igual a                    cad2
>0        si         cad1    es mayor que              cad2

public class CCompateTo {
public static void main(String [] args){
            String c1="Universo Java";
            String c2="Universo Visual J";
            int i;
            i=         c1.compareTo(c2);
            if (c1.compareTo(c2)<0){
                        System.out.println(c2);
            }
            else
            {
                        System.out.println(c1);
            }
            System.out.println("El valor de i = "+i);
            //Otros Casos
            System.out. println("Compara Windows con Waterloo  :"+"Windows".compareTo("Waterloo"));
            System.out.println("Windows es mayor que Waterloo");
  }  
}
Salida en Pantalla es :
Universo Visual J
El valor de i = -12
Compara Windows con Waterloo  :8
Windows es mayor que Waterloo

CONVERSIÓN DE CADENAS


Método toUpperCase( );
Este método devuelve una cadena con los mismos caracters que la cadena que llama al método, excepto las letras minúsculas, se convierten en mayúsculas
String org= "la ducle vida";
            System.out.println(org.toUpperCase());

Salida:
LA DUCLE VIDA

Método toLowerCase( );
Este método devuelve una cadena con los mismos caracteres que la cadena que llama al método, excepto las letras mayúsculas, que se convierten en minúsculas

String org= "la Casa Vieja";
System.out.println(org.toLowerCase()); //escribe LA DULCE VIDA

Método replace( );
Este método crea una nueva cadena en la que se ha sustituido todas las ocurrencias de un carácter por otro . El método tiene dos argumentos , el primero representa el carácter de la cadena origen que va a ser cambiado y el segundo argumento el carácter que le sustituye .

            String org= "la Casa Vieja";
System.out.println(org.replace(' ','#')); //salida : la#Casa#Vieja

Método toCharArray( );
Este método devuelve un array con los caracteres de la cadena que llama al método. Para ello crea un array de tantos elementos como la longitud de la cadena y copia los caracteres :

String cad ="Ventana";
               char[] ac =cad.toCharArray();

 

3.7.2 La clase StringBuffer.


La clase String tiene una característica que puede causar problemas, y es que los objetos String se crean cada vez que se les asigna o amplia el texto. Esto hace que la ejecución sea más lenta. Este código:

String frase=“Esta “;
frase += “es ”;
frase += “la ”;
frase += “frase”;

En este código se crean cuatro objetos String y los valores de cada uno son copiados al siguiente. Por ello se ha añadido la clase StringBuffer que mejora el rendimiento. La concatenación de textos se hace con el método append:

StringBuffer frase = new StringBuffer(“Esta ”);
frase.append(“es “);
frase.append(“la “);
frase.append(“frase.“);

Por otro lado el método toString permite pasar un StringBuffer a forma de cadena String.

StringBuffer frase1 = new StringBuffer(“Valor inicial”);
...
String frase2 = frase1.toString();

Se recomienda usar StringBuffer cuando se requieren cadenas a las que se las cambia el texto a menudo. Posee métodos propios que son muy interesantes para realizar estas
modificaciones (insert, delete, replace,…).

3.7.2.1 Constructores de la clase StringBuffer.

Crea un StringBuffer vacío.

Crea un StringBuffer vacío de la longitud especificada por el parámetro.

Crea un StringBuffer con el valor inicial especificado por el String.

3.7.2.2 Métodos de la clase StringBuffer.


De forma análoga a lo que ocurre con la clase String, la clase StringBuffer proporciona una gran cantidad de métodos que se encuentran enumerados en
StringBuffer append(tipo variable) Añade al StringBuffer el valor en forma de cadena de la variable.
char charAt(int pos) Devuelve el carácter que se encuentra en la posición pos.
int capacity() Da como resultado la capacidad actual del  StringBuffer
StringBuffer delete(int inicio, int fin) Borra del StringBuffer los caracteres que van desde la posición inicio a la posición fin
StringBuffer deleteCharAt(int pos) Borra del StringBuffer el carácter situado en la posición pos .
void ensureCapacity(int capadMinima) Asegura que la capacidad del StringBuffer sea al menos la dada en la función.
void getChars(int srcInicio, int srcFin,char[] dst, int dstInicio) :Copia a un array de caracteres cuyo nombre es dado por el tercer parámetro, los caracteres del StringBuffer que van desde srcInicio a srcFin. Dichos caracteres se copiarán en el array desde la posición dstInicio
StringBuffer insert(int pos, tipo valor) Inserta el valor en forma de cadena a partir de la posición pos del StringBuffer.
int length() Devuelve el tamaño del StringBuffer .
StringBuffer replace(int inicio, int fin, String texto) Reemplaza la subcadena del StringBuffer que va desde inicio a fin por el texto indicado.
StringBuffer reverse() Se cambia el StringBuffer por su inverso
void setLength(int tamaño) Cambia el tamaño del StringBuffer al tamaño indicado.
String substring(int inicio) Devuelve una cadena desde la posición inicio.
String substring(int inicio, int fin) Devuelve una cadena desde la posición inicio
hasta la posición fin.
String toString() Devuelve el StringBuffer en forma de cadena

 

Ejemplo de cadena Inversa hacemos uso de un método que le da vuelta a una cadena

class CadInversa {
    public static String cadenaInversa( String fuente ) {
        // Se obtiene la longitud de la cadena que se pasa
        int longitud = fuente.length();

        // Se crea un stringbuffer de la longitud de la cadena
        StringBuffer destino = new StringBuffer( longitud );

        // Se recorre la cadena de final a principio, añadiendo
        // cada uno de los caracteres leidos al stringbuffer
        for( int i=(longitud-1); i >= 0; i-- )
            destino.append( fuente.charAt( i ) );

        // Devolvemos el contenido de la cadena invertida
        return( destino.toString() );
        }

    public static void main( String args[] ) {
        // Imprime el resultado inverit la cadena que se toma por
        // defecto
        System.out.println( cadenaInversa( "Hola Mundo" ) );
        }    }

 

 

3.7.3 Búsqueda de caracteres y cadenas.

La clase String contiene dos métodos que permiten localizar carcatres en cadenas y subcadenas en cadenas. Estos métodos son indexOf() y lastIndexOf(); pueden llamarse para buscar un carácter o una cadena, por tanto están sobrecargados con diversas versiones.

3.7.3.1 Método indexOf()
Permite buscar caracteres y patrones de caracteres (SubCadenas) en cadenas. En general localiza la primera ocurrencia del argumento en la cadena que llama al método. Devuelve la posición de la primera ocurrencia del carácter en la cadena; si no encuentra el carácter devuelve -1. El argumento del método es la representación entera del caracter. Normalmente se bucan caracteres, por lo que hay que hacer un cast a int en la llamada. Por ejemplo:
           
            int indexOf(int c)

Así, por ejemplo, se quiere buscar ‘v’ en una cadena pat
String pat= Java, lenguaje de alto nivel;
int k;
k=pat.indexOf((int)’v’);
en este caso en cuentra ‘v’ en la posición 2.
La búsqueda se inicia a partir de la posición 0; para iniciar la búsqueda a partir de otra posición hay una versión de indexOf() con un segundo argumento de tipo entero que representa dicha posición:

int indexOf(in c, int p);
Con el método indexOf( ) también se puede bucar un patrón de caracteres o subcadenas; en este caso el argumento es un objeto cadena con los caracteres a buscar. El método devuelve la posición de inicio de la  primera ocurrencia, o bien  -1 si no es localizada.

int indexOf(String patron )

por ejemplo:
String pat=”La familia de programadores de alto nivel”;
int k;
k=pat.indexOf(“ama”);
en esta búsqueda encuentra la cadena en la posición 19, que se asigna a la variable k.

Para que la búsqueda de la subcadena se inicie en una posición distinta de la cero se pasa un segundo argumento entero con la posición en la comienza la búsqueda.

int indexOf(string patron , int p)

por ejemplo :
String pat=(“La familia de programadores de alto nivel”);
int k;
k=pat.indexOf(“de”, 17)

Esta búsqueda se inicia a partir de la posición  17, encuentra la cadena en la posición 27
 

Volver al índice

Enciclopedia Virtual
Tienda
Libros Recomendados


1647 - Investigaciones socioambientales, educativas y humanísticas para el medio rural
Por: Miguel Ángel Sámano Rentería y Ramón Rivera Espinosa. (Coordinadores)

Este libro es producto del trabajo desarrollado por un grupo interdisciplinario de investigadores integrantes del Instituto de Investigaciones Socioambientales, Educativas y Humanísticas para el Medio Rural (IISEHMER).
Libro gratis
Congresos

15 al 28 de febrero
III Congreso Virtual Internacional sobre

Desafíos de las empresas del siglo XXI

15 al 29 de marzo
III Congreso Virtual Internacional sobre

La Educación en el siglo XXI

Enlaces Rápidos

Fundación Inca Garcilaso
Enciclopedia y Biblioteca virtual sobre economía
Universidad de Málaga