This commit is contained in:
Rochas
2025-12-07 20:35:29 +01:00
parent af5fb7918d
commit 5869506f40
5 changed files with 71 additions and 54 deletions

View File

@@ -4,7 +4,6 @@ import java.util.ArrayDeque;
import java.util.Deque;
import java.util.HashMap;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
public class StringUtils {
@@ -27,39 +26,19 @@ public class StringUtils {
public static boolean isBalanced(String str) {
Deque<Character> balancedQueue = new ArrayDeque<Character>();
return reqIsBalanced(str, balancedQueue);
}
public static boolean reqIsBalanced(String str,Deque<Character> balancedQueue){
int nbRemove = 1;
if(str.length()>0){
char c=str.charAt(0);
while(true){
if(OPEN.contains(c)){
balancedQueue.push(c);
return reqIsBalanced(str.substring(nbRemove), balancedQueue);
for(int i = 0; i<str.length(); i++){
char c = str.charAt(i);
if(OPEN.contains(c)){
balancedQueue.push(c);
}
else if(CLOSE.contains(c)){
if(balancedQueue.isEmpty() || CONVERT.get(balancedQueue.pollFirst()) != c){ //vérifie et retire en même temps
return false;
}
else if(CLOSE.contains(c)){
if(balancedQueue.isEmpty()){
return false;
}
else if(CONVERT.get(balancedQueue.pollFirst()) == c){
return reqIsBalanced(str.substring(nbRemove),balancedQueue);
}
else{
return false;
}
}
else if(nbRemove<str.length()){
c = str.charAt(nbRemove);
nbRemove++;
}
else return balancedQueue.isEmpty();
}
}
return balancedQueue.isEmpty();
}
}

View File

@@ -8,6 +8,12 @@ import static org.junit.jupiter.api.Assertions.*;
class StringUtilsTest {
@Test
public void testEmpty(){
String prog1 = "";
assertTrue(isBalanced(prog1));
}
@Test
public void testBalancedSimple(){
String prog1 = "()";
@@ -31,16 +37,9 @@ class StringUtilsTest {
}
@Test
public void testEmpty(){
String prog1 = "";
assertTrue(isBalanced(prog1));
}
@Test
public void testOnlyText(){
String prog1 = "abc";
String prog1 = "test";
String prog2 = "abc'éhçfez_énrui";
assertTrue(isBalanced(prog1));
assertTrue(isBalanced(prog2));
@@ -49,8 +48,8 @@ class StringUtilsTest {
@Test
public void testBalancedSimpleWithText(){
String prog1 = "(abc)";
String prog2 = "abc'[éhçfez]_énrui";
String prog3 = "abc'{éhçfez_énrui<}";
String prog2 = "a[b]";
String prog3 = "aaa{aaaa}aa";
assertTrue(isBalanced(prog1));
assertTrue(isBalanced(prog2));
assertTrue(isBalanced(prog3));
@@ -83,20 +82,19 @@ class StringUtilsTest {
@Test
public void testBalancedFull(){
String prog1 = "for(int i = 0;i<10; i++){System.out.println(\"tab[i]\");}";
String prog1 = "white(true){println(\"Tester c\'est pas douter\");}";
assertTrue(isBalanced(prog1));
}
@Test
public void testnotBalancedFullForgotClose(){
String prog1 = "for(int i = 0;i<10; i++{System.out.println(\"tab[i]\");}";
String prog1 = "white(true){println(\"Tester c\'est pas douter\";}";
assertFalse(isBalanced(prog1));
}
@Test
public void testnotBalancedFullFrogotOpen(){
String prog1 = "forint i = 0;i<10; i++){System.out.println(\"tab[i]\");}";
String prog1 = "white(true){println\"Tester c\'est pas douter\");}";
assertFalse(isBalanced(prog1));
}