diff --git a/src/main/java/AsciiStringFilter.java b/src/main/java/AsciiStringFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..ce0a936a53c416fedcf3e219f1dbecc99b7980aa --- /dev/null +++ b/src/main/java/AsciiStringFilter.java @@ -0,0 +1,14 @@ +public class AsciiStringFilter implements StringFilter{ + + + @Override + public String filter(String string) { + String filteredString = ""; + for (int i = 0; i < string.length(); i++) { + if(((int)string.charAt(i) < 128)){ + filteredString += string.charAt(i); + } + } + return filteredString; + } +} diff --git a/src/main/java/CompositeStringFilter.java b/src/main/java/CompositeStringFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..c84643759ccc4d3c0068aa491491c6e7d89a9ec5 --- /dev/null +++ b/src/main/java/CompositeStringFilter.java @@ -0,0 +1,16 @@ +public class CompositeStringFilter implements StringFilter{ + + private StringFilter[] filters; + + public CompositeStringFilter(StringFilter[] filters){ + this.filters = filters; + } + + @Override + public String filter(String string) { + for(StringFilter filter : this.filters){ + filter.filter(string); + } + return string; + } +} diff --git a/src/main/java/LowerCaseStringFilter.java b/src/main/java/LowerCaseStringFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..8d37d0f87ca073005430973159a1e4438db7c631 --- /dev/null +++ b/src/main/java/LowerCaseStringFilter.java @@ -0,0 +1,7 @@ +public class LowerCaseStringFilter implements StringFilter{ + + @Override + public String filter(String string) { + return string.toLowerCase(); + } +} \ No newline at end of file diff --git a/src/main/java/PostfixStringFilter.java b/src/main/java/PostfixStringFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..2359bd7c769719c1aa56a374fdde9a0df4450c95 --- /dev/null +++ b/src/main/java/PostfixStringFilter.java @@ -0,0 +1,13 @@ +public class PostfixStringFilter implements StringFilter{ + + private int n; + + public PostfixStringFilter(int n) { + this.n = n; + } + + @Override + public String filter(String string) { + return string.substring(string.length() - n, string.length()); + } +} diff --git a/src/main/java/PrefixStringFilter.java b/src/main/java/PrefixStringFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..02e6dc17c67e27bd8aeeb8420a0870978d5c55c8 --- /dev/null +++ b/src/main/java/PrefixStringFilter.java @@ -0,0 +1,13 @@ +public class PrefixStringFilter implements StringFilter{ + + private int n; + + public PrefixStringFilter(int n) { + this.n = n; + } + + @Override + public String filter(String string) { + return string.substring(0, n); + } +} diff --git a/src/main/java/Stack.java b/src/main/java/Stack.java index 9eea850b15898b0b60392b99e34501f56a91c5fb..4575bcef88bc45926cf7f6cba6090f6a33a26cb0 100644 --- a/src/main/java/Stack.java +++ b/src/main/java/Stack.java @@ -1,36 +1,31 @@ public class Stack { - private Vector vector; + + Vector vector; public Stack() { - vector = new Vector(10); + this.vector = new Vector(); } public void push(int value) { - vector.add(value); + this.vector.add(value); } public int peek() { - if (vector.isEmpty()) { - throw new IllegalStateException("La pile est vide."); - } - return vector.get(vector.size() - 1); + return this.vector.get(this.vector.size()-1); } - public int pop() { - if (vector.isEmpty()) { - throw new IllegalStateException("La pile est vide."); - } - int value = vector.get(vector.size() - 1); - vector.set(vector.size() - 1, 0); - vector.resize(vector.size() - 1); - return value; + public int pop(){ + int lastElement = this.vector.get(this.vector.size()-1); + this.vector.resize(vector.size()-1); + return lastElement; } public int size() { - return vector.size(); + return this.vector.size(); } - public boolean isEmpty() { - return vector.isEmpty(); + public boolean isEmpty(){ + return this.vector.isEmpty(); } + } diff --git a/src/main/java/StringFilter.java b/src/main/java/StringFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..5faf9d9f194e5a0de0540bb81db2b88a8ad83de9 --- /dev/null +++ b/src/main/java/StringFilter.java @@ -0,0 +1,11 @@ +public interface StringFilter { + + String filter(String string); + + static String[] filter(String[] strings, StringFilter filter) { + for(String string : strings) { + filter.filter(string); + } + return strings; + } +} diff --git a/src/main/java/UpperCaseStringFilter.java b/src/main/java/UpperCaseStringFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..8bfb0cb7f8222935eeec39785c33258c42858259 --- /dev/null +++ b/src/main/java/UpperCaseStringFilter.java @@ -0,0 +1,9 @@ +public class UpperCaseStringFilter implements StringFilter { + + + @Override + public String filter(String string) { + return string.toUpperCase(); + } + +} diff --git a/src/main/java/Vector.java b/src/main/java/Vector.java index 49c78482232ac11b9ceea6f5c50b26fab7f8b54a..902d633915c05da2a474850204543dbad46890b3 100644 --- a/src/main/java/Vector.java +++ b/src/main/java/Vector.java @@ -1,53 +1,85 @@ +import java.util.Arrays; + +/** + * La classe Vector implémente un tableau d'entiers * de taille dynamique. Les éléments du + * vecteur sont stockés dans un tableau. * La taille de ce tableau est au minimum doublée + * à chaque fois qu'il est * nécessaire de le faire grossir. + */ public class Vector { - private int[] array; + + /** + * Tableau permettant de stocker les éléments du vecteur. + * Seuls les size premiers éléments font partie du vecteur. + * La taille de ce tableau est égale à la capacité du vecteur, c'est-à-dire, + * au nombre d'éléments maximum que le vecteur peut contenir sans + * avoir besoin d'allouer un nouveau tableau. + */ + private int[] elements; + + /** + * Nombre d'éléments présents dans le vecteur. + */ private int size; + /** + * Construit un vecteur de capacité initiale initialCapacity. + * + * @param initialCapacity Capacité initiale du vecteur + */ public Vector(int initialCapacity) { - array = new int[initialCapacity]; + elements = new int[initialCapacity]; size = 0; } - public void ensureCapacity(int capacity) { - if (array.length < capacity) { - int newCapacity = Math.max(capacity, 2 * array.length); - int[] newArray = new int[newCapacity]; - System.arraycopy(array, 0, newArray, 0, size); - array = newArray; - } + public Vector() { + this(10); + } + + /** + * Augmente la capacité du vecteur si nécessaire de façon + * à permettre le stockage d'au moins <code>minCapacity</code> + * éléments. S'il est nécessaire d'augmenter la capacité du vecteur, + * elle est au minimum doublée. + * + * @param minCapacity Capacité minimale à assurer + */ + public void ensureCapacity(int minCapacity) { + int oldCapacity = elements.length; + if (oldCapacity >= minCapacity) return; + int newCapacity = Math.max(oldCapacity * 2, minCapacity); + elements = Arrays.copyOf(elements, newCapacity); } public void resize(int newSize) { ensureCapacity(newSize); - for (int i = size; i < newSize; i++) { - array[i] = 0; - } - size = newSize; + this.size = newSize; } - public int size() { - return size; + /** + * Retourne la capacité du vecteur. + * + * @return Capacité du vecteur. + */ + public int capacity() { + return elements.length; } - public boolean isEmpty() { - return size == 0; - } + public int size() { return this.size; } - public void add(int value) { - ensureCapacity(size + 1); - array[size] = value; - size++; + public boolean isEmpty() { return this.size == 0; } + + public void add(int element) { + int lastIndex = size; + this.resize(size+1); + this.elements[lastIndex] = element; } - public void set(int index, int value) { - if (index >= 0 && index < size) { - array[index] = value; - } + public void set(int index, int element) { + if(this.size < index + 1) return; + this.elements[index] = element; } public int get(int index) { - if (index >= 0 && index < size) { - return array[index]; - } - return 0; - } -} + if(this.size<index+1) return 0; + return this.elements[index]; } +} \ No newline at end of file