All equations can be simplified to ax + b = cx +d, when a==c, if(b ≠ d), then there is no solution, if(b==d), there are infinite solutions. If a ≠ c, then ans = (b-d)/(a-c). The challenge is how to parse the coefficients. Here is one possible approach:

```
public class Solution {
public String solveEquation(String equation) {
String[] eq = equation.split("=");
int a = process(eq[0])[0];
int b = process(eq[0])[1];
int c = process(eq[1])[0];
int d = process(eq[1])[1];
if(a==c) return (b==d)?"Infinite solutions":"No solution";
return "x=" + String.valueOf((d-b)/(a-c));
}
public int[] process(String equation){
// coefficient[0] is coe before x and coefficient[1] is constant
int[] coefficient = new int[2];
int i = 0;
boolean positive = true;
while(i < equation.length()){
if(equation.charAt(i) == '+' || equation.charAt(i) == '-'){
positive = (equation.charAt(i) == '+')?true:false;
i++;
continue;
}
if(equation.charAt(i) == 'x'){
coefficient[0] += (positive)?1:-1;
}
if(Character.isDigit(equation.charAt(i))){
int sum = 0;
while(i < equation.length() && Character.isDigit(equation.charAt(i))){
sum = sum*10 + (equation.charAt(i) -'0');
i++;
}
if(i != equation.length() && equation.charAt(i) == 'x'){
coefficient[0] += (positive)?sum:-sum;
}
else{
coefficient[1] += (positive)?sum:-sum;
i --;
}
}
i ++;
}
return coefficient;
}
}
```